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

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

In [14]: s.cookies
Out[14]: <RequestsCookieJar[]>

刚刚检查了一下发现是一个自定义的结构,并不能直接赋值,从网上查了一下找到了一个文章。
http://www.lihuai.net/program/python/1617.html(还能访问,但是好像被挂了广告)

#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 文档

最后修改:2018 年 02 月 28 日 05 : 35 PM