曾经一直以为requests.Session()的cookies是dict类型的,因为一直没用过,所以也不甚了解,直到今天想要用python监控一下火车票才发现没我想的那么简单。

In [13]: s=requests.Session()

In [14]: s.cookies
Out[14]: <RequestsCookieJar[]>
#CookieJar转为字典
requests.utils.dict_from_cookiejar(r.cookies)
#字典转为CookieJar
requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True)

也就是说,使用Session()跨请求保持http参数,cookies定义的时候应该这么写。

s = requests.Session()
cookie_dict = {
'JSESSIONID': 'A44BD7AC80CE7182CDA7880237AF93B8'
}
s.cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True)

另外,用Session()向同一主机发出多个请求的时候,底层的tcp链接将会被重用,从而显著提升性能,所以做数据抓取或者监控的时候,一定要用Session()方法。

参考:
高级用法 - Requests 2.18.1 文档

最后修改:2022 年 08 月 10 日
如果觉得我的文章对你有用,请随意赞赏