Python获取cookie有什么用

什么是cookie?
Cookie,这意味着一些网站存储在用户本地终端上的数据(通常是加密的),以识别用户身份并跟踪session。在web开发中,通常需要跟踪会话。因为http请求是一个无状态协议,也就是说,只有通过http,服务器无法区分不同的客户端。也就是说,在您访问此页面后,在刷新一次。如果没有cookie,服务器不知道现在刷新的用户和刚刚访问的用户。它被视为一个新的请求,因此带来了一些不便。特别是,需要登录的页面不能每页登录一次。每次更新都需要登录一次。也就是说,需要一定的机制来增强http协议,使服务器能够区分它是同一个客户端。这种机制是cookie。
如何工作cookie?
当你第一次访问一个网站时,服务器会给你一个特定的cookie,然后每次你访问这个网站,你发送的请求都会带来相应的cookie,这样服务器就知道这两个请求是由同一个客户发送的。

相关建议:Python教程
第一次访问某个网站,服务器会给你一个cokie,response headers中有setters-cookie 字段,就是告诉浏览器,把这个cookie放在本地,以后访问我这个网站的时候,都会带上这个cookie,我就知道你是谁了。
然后刷新页面,相当于第二次访问

第二次访问时会发现,response headers里没有这个setters cookie字段,但requesttt headers 里面有一个cookie字段,如果你仔细观察,你会发现这个值正好是response。 headers set cookie字段的值。事实上,只要你不关闭浏览器,当你打开窗口时,你会发现cookie值仍然是这样。默认情况下,关闭浏览器或更换浏览器,服务器认为这是一个新的会话。可可的存储时间可以设置。你会发现知乎、简书等网站。只要你成功登录,即使你关闭浏览器,你仍然会在几天后登录,这表明可可是一个持久的可可,存储时间相对较长。
从以上两张图片可以看出,cookie确实存在于http请求和响应报头中。
如何使用python实现cookie登录?
由于我们可能了解可okie机制,我们将尝试使用可okie登录。以登录知乎为例。如果您使用帐户密码登录,验证码是一个大问题。至少现在对我来说是这样,所以您首先使用浏览器手动登录知乎。右键输入开发人员选项,network,选择www.zhihu.com,查看请求头信息。

然后复制cookie,开始写代码。
importrequests
frombs4importBeautifulSoup
headers={
'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/61.0.3163.100
Safari/537.36',
'Referer':'https://www.zhihu.com/',
'Cookie':'q_c1=3660dc56c7d4cf3af1459ea69ed1|15086618000|1508666618000;q_c1=e1adb01bc534c0b61e0d4e08f7344
1508646188000|1508646188000;_zap=7926df57-02e2-45a7-924-85ff9156e;d_c0="ABACUGPkyptgydlhc0-ywrdeoJ3_w=|
1508841150";r_cap_id="Nje4ywexotixm2ywngvlodhmnjc5zde3mgynwmmMjM=|1508844066|
4207fbc526844cb9484b64";cap_id="Yzrymm5ytjhZWM4NGFiyWExOGYzoTU1ZjczMGMyOGI=|1508844066|
a828518ba799ea99ea0cd6a54f25dc30cd70cd";z_c0=Mi4xtk5WX0FnQUFBFFBRUFJSzRVRVRQMNBQUFCaEFsvk5zM0RJV2dWFTS16Tmv1
dk80dtvZSnpqognpblf3|15084421|c340d43748f038bedfa2cbcd48e27。;__utma=51854390.9389312.1508841151.
1508841151.1508843285.2;__utmz=51854390.1508841151.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic;__utmv=51854390.
100-1|2=registration_date=20160120=1^3=entry_date=20160120=1;aliyungf_tc=AQAAB0ub1XAWQIAYKcClINzXafvOI;
_xsrf=3283d7f2-8e92-4b94-9b0e-1105c2d069d0'
}
res=requests.get("https://www.zhihu.com/search?type=content&q=java",headers=headers)
soup=BeautifulSoup(res.text,'html.parser')
n=soup.select(".list")[0].select(".item")
你可以发现你已经抓住了需要登录才能看到的页面,如果你删除了请求头中的可可字段,它将帮助你重新定向登录页面。
