python登录V2EX失败

2013-05-12 10:36:53 +08:00
 xuelang
之前看了“谁写个自动领取奖励脚本?”(http://www.v2ex.com/t/68136),自己刚接触python,所以想试着写一个练练手。

用到python的requests库,关于网站登录部分,分析了一下登录提交的表单,有5个字段,类似下面:
next=%2F&u=***&p=***&once=21381&next=%2F

首先分析登录界面取出next,once,next值,分别为input_next_value_pre、input_once_value、input_next_value_post, 然后用requests请求页面,主要代码如下:
signin_url = "http://www.v2ex.com/signin"
user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) \
AppleWebKit/537.31 (KHTML, like Gecko) \
Chrome/26.0.1410.65 Safari/537.31"
headers = {"User-Agent": user_agent}

logininfo = {"next": input_next_value_pre,
"u": usr_name,
"p": passwd,
"once": input_once_value,
"next": input_next_value_post
}
signin_req = requests.post(signin_url,
data=logininfo,
headers=headers,
)

结果登录老是失败,怀疑是v2ex的登录表单中有两个next字段,并且值一样,这样构建post字典第二个next就被忽略,不知道该怎么解决呢?
7105 次点击
所在节点    Python
37 条回复
whtsky
2013-05-12 10:45:13 +08:00
你很缺钱么…
DH
2013-05-12 11:06:32 +08:00
我估计是cookie的问题,你在post之前,先GET一次,把cookie存下来,再post。
swulling
2013-05-12 11:15:23 +08:00
1. 第一次请求的时候有PB3_SESSION的cookie,不用存,用requests的话直接用Session就很方便
2. next不是问题,你提交两个就好了
3. 注意POST的Referer要带上

实测可以登陆,没问题
swulling
2013-05-12 11:16:01 +08:00
4. next不用分析页面,直接'/'就好
xuelang
2013-05-12 11:38:01 +08:00
@whtsky 不是,只是对网站自动验证感兴趣,又看到那个问题,就拿v2ex做了下实验了
xuelang
2013-05-12 11:38:59 +08:00
@DH
@swulling
谢谢,已解决。
DH
2013-05-12 11:42:32 +08:00
网站防爬虫的办法是五花八门,每个站都不一样。
xuelang
2013-05-12 11:44:23 +08:00
@DH 那要爬网站时,认证时有没有什么一般的思路呢?
swulling
2013-05-12 11:45:29 +08:00
@xuelang 分析请求。模拟人工操作。

一般来说,只要不是开验证码或者用浏览器插件。。凡是人能做的,机器也能做
xuelang
2013-05-12 11:48:03 +08:00
@swulling 嗯,明白了。
xuelang
2013-05-12 11:52:08 +08:00
@swulling 不过说到底还是要了解http协议,web的一些知识。
DH
2013-05-12 11:53:45 +08:00
一般就是cookie上做文章,有些好像是js设置cookie,就得运行js代码或者弄明白算法自己算。

苹果那个下单页面,把cookie放在静态文件里面,这些文件一般爬虫不抓,就缺cookie的值。
Aeolia
2013-05-12 15:00:22 +08:00
@xuelang 请问最后是怎么解决的?
beakey
2013-05-12 16:01:21 +08:00
@xuelang once的随即生成就可以?
xuelang
2013-05-12 17:25:45 +08:00
@Aeolia post请求头加了Referer,并且用requests的Session.
xuelang
2013-05-12 17:26:39 +08:00
@beakey once先get一下登陆界面,分析html取出once值。
yanwen
2013-05-12 22:00:20 +08:00
菜鸟求代码。
yaotian
2013-05-12 22:30:04 +08:00
@swulling 可有些网站有加密的,例如weibo.com的登陆。机器去做不是很容易的。
flewover
2013-05-12 22:33:17 +08:00
@yaotian weibo.com如何做加密的?我之前有用过selenium的api登录weibo.com很容易。
swulling
2013-05-12 23:10:33 +08:00
@yaotian 没啥不容易的

不嫌烦的话用python去模拟js的行为,嫌烦的话直接用这个
https://github.com/DYFeng/GRobot

除非丧心病狂用flash,activex。。

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

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

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

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

© 2021 V2EX