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 验证码图片来解决)

我现在有三个个问题:

谢谢

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

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

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

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

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

© 2021 V2EX