请教 Python 爬虫模拟 Login 时的错误排查

2016-01-04 13:43:04 +08:00
 braineo
最近在试着爬银行帐单的网页,需要 Login

Login 是一个 AJAX 的 POST ,在用 Chrome 抓包分析了 Header 跟 Payload 之后,用 POSTMAN 验证了

header 需要
X-Requested-With
User-Agent
Content-Type

Payload 需要
requestTimestamp
user
password

用 POSTMAN 加上以上字段进行试验,可以得到 200 的返回,一切正常

后用 Python 的 Requests 库写了一个爬虫 用了 Session

s = requests.Session()
r = session.post(login_url, params=login_payload, headers=login_header, allow_redirects=True)

login_payload 和 login_header 里的数据与 POSTMAN 里用的一样,但是却是 500 的返回

想请教一下排查思路,如果做法有误也请不吝指出
2812 次点击
所在节点    Python
9 条回复
Strikeactor
2016-01-04 13:47:51 +08:00
shidenggui
2016-01-04 13:54:29 +08:00
用 OrderedDict 指定下参数顺序看下,有些网站会检查这个,不过概率很低。
最好你打下 requests 的 log 跟你发送的对比下看看
Caratpine
2016-01-04 14:02:20 +08:00
有可能是 login 这个请求之前,网站加载了另外一些请求,这些请求当中有可能 set 了一些必要的 cookie
braineo
2016-01-04 14:28:19 +08:00
@Strikeactor 好工具
braineo
2016-01-04 14:28:50 +08:00
@shidenggui 下班回去试试
braineo
2016-01-04 14:29:45 +08:00
@Caratpine 原来如此,还有这种可能。这是一种防爬的机制么?
Caratpine
2016-01-04 14:40:39 +08:00
@braineo 我觉得算是一种吧,我之前也抓过一个网站,在加载一个 js 文件的时候 set 了一个必要的 cookie ,我之前用的验证工具如果不清理本地 cookie 的话,即使你模拟的 header 里面没有加 cookie ,这个工具也会在模拟的时候读取你的本地 cookie ,比较坑爹,所以我觉得你这种情况和我之前遇到的问题很类似。
dapang1221
2016-01-04 14:59:20 +08:00
直接抓爬虫的流量,和正常访问比较一下
braineo
2016-01-04 21:54:37 +08:00
@Caratpine 就是这个 cookies 的问题啊……坑死人了,用 POSTMAN 的时候会从浏览器里抽 Cookies 但是自己模拟的话就缺了这个,现在好了 200 了

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

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

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

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

© 2021 V2EX