Python 爬虫模拟登陆的一些问题

2016-07-30 10:59:04 +08:00
 Huayx9

import Requests

有三个 url ,登陆页面,表单提交页面,登陆返回页面

首先浏览器过程如下:

1.登陆要输入验证码,验证码在登陆页面显示

2.输入登录信息之后, post 表单到表单提交页面

3.然后页面跳转到登陆返回页面,也就是我要抓取的页面

我用爬虫模拟登陆,然后抓取登陆返回页面的信息

requests.get 登陆页面,然后提取页面中的验证码链接,但是验证码链接刷新,验证码就会变化

验证码页面 http://ah.189.cn/sso/VImage.servlet?random=0.17272478651825085 (参数在登陆页面是会变化的)

requests.port 表单提交页面(验证码,我通过 ocr 验证码图片来解决)

我现在有三个个问题:

谢谢

4791 次点击
所在节点    Python
29 条回复
Huayx9
2016-07-30 18:28:37 +08:00
@aeshfawre 。。。要哭了,不过,我自己摸着石头走了一段路
jackyspy
2016-07-30 19:17:53 +08:00
@Huayx9 不需要自己手工管理 cookie
```
import requests
s = requests.session()
print(s.get('http://httpbin.org/cookies').json())
s.get('http://httpbin.org/cookies/set?sessionid=abcdefg')
print(s.get('http://httpbin.org/cookies').json())
```
Output
```
{'cookies': {}}
{'cookies': {'sessionid': 'abcdefg'}}
```
Huayx9
2016-07-31 10:13:32 +08:00
@jackyspy 昨晚折腾了好久, cookie 终于弄明白了。

可是登录 post 表单到一个接收页面, post 和获取验证码带的都是之前的 cookies (初始化)。

在浏览器下,显示是登录之后跳转到之后的页面, header 是带上新的 cookie (登录成功)来 get 的。

但是代码在 post 之后,从哪儿得到登录成功的 cookie 。。
eoo
2016-07-31 11:39:50 +08:00
后面的 random 其实就是 JS 的函数 Mate.random()产生的 0-1 的随机数 服务端不做验证的 只是为了防止浏览器缓存
Huayx9
2016-07-31 22:30:35 +08:00
@eoo 这个我明白,登陆之前的问题都解决了,但是现在不知道该怎么得到 post 过程中和登陆成功之后的 cookies
aeshfawre
2016-07-31 22:34:51 +08:00
@Huayx9 所以让你研究 Seesion(), 这个功能就是帮你处理了 cookie 的所有事情,也就是不需要考虑 cookie 的问题的.
登录成功之后服务器会在返回的数据包中给你 cookie,而这个返回的 cookie 会自动被 requests 处理好,存放起来的,你后面继续 get,post,这 cookie 会自动帮你加上的.
eoo
2016-07-31 23:06:46 +08:00
@eoo 抓包就知道啊
jackyspy
2016-08-01 08:08:17 +08:00
@Huayx9 估计你不是用的同一个 session 。

PS :提问最好附带能提现问题的可运行简易代码段
mingyun
2016-09-11 10:45:17 +08:00
requests.get(url, headers=header,cookies=cookies)

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

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

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

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

© 2021 V2EX