首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pythons requests.session cookie检索问题

Pythons requests.session cookie检索问题
EN

Stack Overflow用户
提问于 2018-08-05 04:35:51
回答 1查看 1.6K关注 0票数 0

我正在尝试从网站抓取数据,当我使用requests.session时,从网站获取cookies似乎有问题。下面的代码可以更好地解释

代码语言:javascript
复制
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36'}
url = "https://www.nseindia.com"
r_without_headers = requests.get(url)
print("response code",r_without_headers.status_code)
print("Resp no header cookies ",r_without_headers.cookies.get_dict())
r_with_headers = requests.get(url,headers = headers)
print("response code",r_with_headers.status_code)
print("Resp with header cookies ",r_with_headers.cookies.get_dict())

s1 = requests.session()
s1_req = s1.get(url)
print("response code",s1_req.status_code)
print("Session no header Cookies ", s1.cookies.get_dict())
print("Session no header Response Cookies", s1_req.cookies.get_dict())

s2 = requests.session()
s2.headers = headers
s2_req = s2.get(url)
print("response code",s2_req.status_code)
print("Session with header Cookies ", s2.cookies.get_dict())
print("Session with header Response Cookies", s2_req.cookies.get_dict())

输出

代码语言:javascript
复制
response code 200
Req no header cookies  {}
response code 200
Req with header cookies  {'ak_bmsc': 'F4040D045001A7CD57BBC58C09C9117F174C9D8E21750000240B665BDDE23467~plhUo272BWU9CTPiQAEJgiZ07qX/BOE0n6iOU8y9pewbmXipo8de1YROpMw6AEtjQDgdt3x+M/2QDATjSAtaRiDVlsDGZfohfsymElg0Xpq0Uta3OYSOSe2B48eg2lJD0CMios+0eqatEro6XvEkYAy+4D14EUHAE/eRp5oVUOpVL6JR8WMNNFoE6Xo7xYQtfLFu8hS1sUNABrYkr6XNFGY3YnkZmawa7imZswMI4tICc='}
response code 200
Session no header Cookies  {}
Session no header Request Cookies {}
response code 200
Session with header Cookies  {}
Session with header Request Cookies {}

ISSUE

网站显然需要User-Agent集合来提供cookie,所以当我使用user agent集合发出get请求时,我会得到预期的cookie,而不需要user-agent集合。

当我尝试用requests.session做同样的事情时,我没有得到响应cookie,有没有头部?

The Question

为什么会发生这种情况?我是不是不正确地使用了会话,还是网站坏了?(如果是这样的话,我不会感到惊讶)

如何使用会话获取cookie?

我目前的想法是发送一个简单的get请求,检索cookie,并在会话中手动设置cookie。但是这似乎不正确,如果cookie在随后的请求中被修改,则不能保证会话将更新cookie,因为原始会话一开始就无法检索cookie。我不希望使用裸体请求来编写完整的代码,并手动将cookie传输到后续请求。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-05 04:42:01

问题是您正在用自己的字典覆盖会话的headers对象(在幕后并不是一个实际的字典)。

相反,只需更新它:

代码语言:javascript
复制
s2.headers.update(headers)

例如。

代码语言:javascript
复制
import requests
url = "https://www.nseindia.com"
s2 = requests.session()
s2.headers.update({'User-Agent': 'Mozilla/5.0'})
s2_req = s2.get(url)
print("Session with header Cookies ", s2.cookies.keys())

快乐的输出

代码语言:javascript
复制
Session with header Cookies  ['ak_bmsc']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51689380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档