您的位置: 网站首页> requests爬虫> 当前文章
什么是Cookie,requests处理Cookie的多种方法
老董-我爱我家房产SEO2019-07-19179围观,108赞
什么是Cookie
浏览器访问网页的时候,服务器就会返回响应头,如果响应头中包含一些字符串,浏览器把这些字符串以文件的形式存储到本地电脑上。再次请求该站的一个网页时请求头就会携带上这个字符串,这个字符串就是cookie。
Cookie的场景
在当当网A页面购买了A书,B页面买了B书,C页面买了C书。虽然是不同的页面但最后订单中可以显示出所有商品。为什么呢,说明服务器对用户有1个标记。即使访问不同网页也能知道是1个人。这种标记就通过Cookies实现。
如果一个http响应中包含了cookie,那么我们可以利用 cookies属性拿到:
# -*- coding: utf-8 -*- headers = { 'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44', } r = requests.get("https://www.baidu.com/",headers=headers) obj = r.cookies print(obj)
<RequestsCookieJar[<Cookie BAIDUID=117CD9E1A49D4164203C4170FD9D5929:FG=1 for .baidu.com/>, <Cookie BIDUPSID=117CD9E1A49D4164645C26EDA9574292 for .baidu.com/>, <Cookie H_PS_PSSID=34442_35106_31254_34903_34504_34916_34813_26350_34868_22160_35018 for .baidu.com/>, <Cookie PSTM=1636619939 for .baidu.com/>, <Cookie BDSVRTM=0 for www.baidu.com/>, <Cookie BD_HOME=1 for www.baidu.com/>]>
r.cookies值为RequestsCookieJar对象,它的行为和字典类似,我们可以遍历来获取值。
# -*- coding: utf-8 -*- headers = { 'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44', } r = requests.get("https://www.baidu.com/",headers=headers) obj = r.cookies for k,v in obj.items(): print(f'{k}:{v}')
BAIDUID:4C1BE25A9C59436E6FBDE1156E42A608:FG=1 BIDUPSID:4C1BE25A9C59436E54B468F3AEB2DEB6 H_PS_PSSID:35104_31254_35048_35096_34504_34917_34578_34813_34815_26350_34971_34867_35018 PSTM:1636620094 BDSVRTM:0 BD_HOME:1
也可以通过requests.utils.dict_from_cookiejar()方式来转为字典。
# -*- coding: utf-8 -*- headers = { 'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44', } r = requests.get("https://www.baidu.com/",headers=headers) cookiejar = r.cookies dic = requests.utils.dict_from_cookiejar(cookiejar) print(dic)
{'BAIDUID': '70866C970551C41F5F02A931FE450B1B:FG=1', 'BIDUPSID': '70866C970551C41F0AE52BFE081C9248', 'H_PS_PSSID': '34949_35104_31254_35050_34903_34504_34916_34579_34812_26350_34970_34867_35018', 'PSTM': '1636620212', 'BDSVRTM': '0', 'BD_HOME': '1'}
如果在请求网页时要想发送cookies到服务器,可以有3种方法选择
1)直接使用cookies参数
2)因为cookies是请求头的一部分,也可以放在headers里去请求(要把字典式的cookie转为key1=value1;key2=value2字符串),大部分情况下是没问题的,有些站却不行!
3)RequestsCookieJar对象的行为和字典类似,但接口更为完整,可以把利用CookieJar来传参请求。
# -*- coding: utf-8 -*- url = 'http://httpbin.org/cookies' # 字典形式传入 cookies = {'k1':'v1','k2':'v2'} r = requests.get(url, cookies=cookies) print(r.text) print('============') # cookie转为key1=value1;key2=value2字符串 cookie_str = "k1=v1;k2=v2" headers = {'Cooike':cookie_str} r = requests.get(url, headers=headers) # 这个站未生效 print(r.text) print('============') # RequestsCookieJar对象形式 jar = requests.cookies.RequestsCookieJar() jar.set('k1', 'v1', domain='httpbin.org', path='/cookies') jar.set('k2', 'v2', domain='httpbin.org', path='/cookies') r = requests.get(url, cookies=jar) print(r.text) print('============')
{ "cookies": { "k1": "v1", "k2": "v2" } } ============ { "cookies": {} } ============ { "cookies": { "k1": "v1", "k2": "v2" } } ============
很赞哦!
python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群
相关文章
文章评论
-
什么是Cookie,requests处理Cookie的多种方法文章写得不错,值得赞赏