请教使用 Python 爬虫获取 Cookie 的问题

200 天前
 mathor
有个登录页面,网址是 http://aaaaa.com/login.jsp ,打开 f12 看到 Network 里 Cookie 当中有这么一个参数“JSESSIONID”,无论我如何刷新页面( F5 或者是 ctrl+F5 ),这个 JSESSIONID 都不会变。我输入用户名密码进行登录以后(没有验证码,只需要输入用户名密码,点击登录按钮),进入主页再看 Network ,这个 Cookie 里 JSESSIONID 的值还是没变过。

问题来了,我用 python
```python
session = requests.session()
params = {'username': xxx, 'password': xxx}
response1 = session.get(login_url, data=params)
response2 = session.get(login_url, data=params)
```
然后我分别打印了`response1`和`response2`的 cookie 看了一下里面的 JSESSIONID 的值,居然完全不一样,难道不应该同一个会话的 JSESSIONID 是一样的吗?

另外还有一个问题就是,我获取 cookie ,然后传给下面的代码
```python
headers = {'cookie': cookie, 'User-Agent': xxxxx, 'Host': xxxx,.....}
response = session.post(url, headers=headers)
print(response.text)
```
如果登录成功,这个 cookie 值是有效的,那么需要登录能访问的 url ,response.text 打印出来应该是网页的内容,可是并不是,打印的结果一看就是没登录成功,很费解🤔

ps: 环境所限,不太能使用 seleinum 这样的自动化库,只能使用爬虫。请各位大佬帮忙参谋参谋是哪儿出了问题,感谢
1244 次点击
所在节点    Python
9 条回复
yumusb
200 天前
建议发具体的看看
mathor
200 天前
@yumusb sorry ,我现在不在办公室,这个网站是公司内网,因此没法发截图之类更详细的内容
julyclyde
200 天前
你用浏览器对比的是:登录前、登录后
你用 requests 对比的是:第一次登录后、第一次还没退出就执行第二次登录后
这俩事件并不一样啊,你为什么会期望他们的 JSESSIONID 相同呢?

第二个问题,建议你打一下 status 看看。也许是个跳转?
jeeyong
199 天前
1. 先访问页面, res = requests.get...
2. cookies = res.cookies
3. requests.get(cookies=cookies)

这么试试呢?
julyclyde
199 天前
@jeeyong 他已经用了 session 了
1018ji
199 天前
JSESSIONID 就是登录生成的呗,先拿浏览器登录的 cookie 测试 2 看成功吗
DOGSO
199 天前
有没有一种可能,这个 JSESSIONID 与你发起的 session 是无关的,只和 login 相关,是无状态的
fbichijing
198 天前
难道不是应该先抓下包吗?
Maerd
196 天前
requests 的 session ,作用是帮你维护一个连接池,请求同一个域的时候会复用 tcp 连接,此外就是会保留设置好的 headers 和 cookie 。http 协议是由请求和响应组成的,而 response 的 cookie ,是你接收到的 http 响应的 headers 的 set-cookie 字段,既然你登陆了两次,这个又怎么会返回一样的值呢?这个和语言无关,题主可以进一步熟悉一下 http 协议

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/984308

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX