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

2016 年 7 月 30 日
 Huayx9

import Requests

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

首先浏览器过程如下:

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

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

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

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

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

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

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

我现在有三个个问题:

谢谢

5611 次点击
所在节点    Python
29 条回复
raycool
2016 年 7 月 30 日
1.可以成功,试一下就知道了,需要 cookies
2.cookies 和 header 可以看作相同, cookies 那一点对于这个问题不用纠结
3.是的,可以直接抓取
Huayx9
2016 年 7 月 30 日
@raycool 十分感谢
aeshfawre
2016 年 7 月 30 日
楼主是想做业务处理软件吧,多年前我也做过,想不到现在还有市场.
这个简单的验证码,用点阵位置模版来识别,编译型语言可以 1 毫秒内识别出来.
你的三个问题很简单:
1:可能你没研究清楚网站交互过程的,你 get 验证码的时候,服务器后台会将这验证码和 cookie 绑定,你只要用这个 cookie 去提交,验证码就是对的.
2:requests.Session(), 研究下这个
3:requests.Session()
jackyspy
2016 年 7 月 30 日
requests 自动处理 cookies
Huayx9
2016 年 7 月 30 日
@aeshfawre 我就是做一个批查询的脚本,查询账号信息。
但是账号要登录,还有验证码。
谢谢详细解答, rerequests.sessession()我知道。
开始将请求验证码的 headerers 和 cookies 装到 session 中来请求验证码,然后用这个 session 来 post ,然后再直接 get 登陆后的 URL 。
这样保持都是同一个 session ?
prasanta
2016 年 7 月 30 日
建议直接从浏览器中复制 cookie 放到 requests 请求的 headers 里面。这样就不用去纠结登陆的问题了。
aeshfawre
2016 年 7 月 30 日
@Huayx9 httpdebugger 我以前研究都是用这个软件,你点击浏览器发生了什么 http 数据,都看在眼里.
用 python 模拟浏览器,你只需要对比下你代码执行的时候发出和接收的 http,与浏览器有什么区别.
就知道怎么修改代码了.
Huayx9
2016 年 7 月 30 日
@prasanta 但还是要输入验证码,我试过的。。
Huayx9
2016 年 7 月 30 日
@jackyspy cookie 要自己传入呀
Huayx9
2016 年 7 月 30 日
@aeshfawre 好的,谢谢。
确实对 http 交互不太熟悉,就是不知道怎么用代码模仿浏览器打开操作。
prasanta
2016 年 7 月 30 日
@Huayx9 cookie 的格式要正确,可以用 http://httpbin.org/cookie 接口来测试你的 cookie
prasanta
2016 年 7 月 30 日
Huayx9
2016 年 7 月 30 日
@prasanta 嗯,格式是字典格式
prasanta
2016 年 7 月 30 日
我喜欢直接放到 header 的 cookie 字段里面,字符串格式。
prasanta
2016 年 7 月 30 日
我的意思是使用登录后的 cookie 直接访问目标页面就可以了。不需要再考虑登录的问题。
Huayx9
2016 年 7 月 30 日
@prasanta 那就不单独传入 cookie ,直接全都放 header 里
Huayx9
2016 年 7 月 30 日
@prasanta 可是那样子还是要验证码。。
Arnie97
2016 年 7 月 30 日
@Huayx9 加载验证码、提交表单、抓去页面都用同一个 requests session 既可,相当于同一个浏览器标签访问这三处,不需要特意处理 Cookies 问题
Huayx9
2016 年 7 月 30 日
@Arnie97 可是,登录之前和登录之后的 cookie 肯定是不同的呀。登录之后的应该有账号信息。
aeshfawre
2016 年 7 月 30 日

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

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

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

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

© 2021 V2EX