首页 > 编程语言 > 详细

python爬虫解决百度贴吧登陆验证码问题

时间:2015-06-10 22:38:45      阅读:498      评论:0      收藏:0      [点我收藏+]

作为贴吧重度用户,写了个贴吧爬虫脚本

抄了一些别人的代码,记得有个验证码解决的,但是忘了链接了,今天终于自己解决了。

首先要让登陆需要验证码,不停地登陆就好了。。。度娘很快会加上验证码大法的。。。需要验证码的情况下,直接登陆返回的错误信息是error=257

打开贴吧首页选择登陆,弹出验证码,找到验证码的链接是
技术分享
右键在新标签页中打开
技术分享
注意到链接是

https://passport.baidu.com/cgi-bin/genimage?jxIcaptchaservice+一串字母数字

这个时候根据之前写的代码,判定登陆成功是根据post登录数据之后返回的一串链接,链接格式是这样:

https://passport.baidu.com/static/passpc-account/html/v3Jump.html?hao123Param=ZzJhSGQzVkhjNGNGUlBNRVZMYlV0YVNYazVTa2xMUWtRdE1FTnJRblZuT1dkeVRXRlBOMlZYU2tsQlZuaFdRVUZCUVVGQkpDUUFBQUFBQUFBQUFBRUFBQUJYbTk4aXdhTFd2cmUwMDZiSzFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFaDBORlZJZERSVmRq&callback=parent.bd__pcbs__ra48vi&index=0&codestring=&username=%E7%AB%8B%E5%BF%97%E5%8F%8D%E5%BA%94%E8%AF%95&phonenumber=&mail=&tpl=pp&u=https%3A%2F%2Fpassport.baidu.com%2F&needToModifyPassword=0&gotourl=&auth=&error=0

最后面的error=0代表没有错误,登陆成功,当需要验证码时,返回的链接redirectURL大约是这样的

https://passport.baidu.com/static/passpc-account/html/v3Jump.html?callback=bd__cbs__34xoc9&index=0&codestring=jxIcaptchaservice616462355546386b494679704d7678684f666d4d5645364a567a376c615563564e43795356514d774378374e63742f44596b367733625a7176766a41706a794f58435365586732506a73376a4f7877784f326442314469774e654575653558747a78657a756639336a2f77674c6f6e34415a396f445952356f326d454e6969325133656c5854754c727257442f796d7332676f4c61612f565946526148586758597a61502f697174715a686b2b5455332f56574f42522f5649415767504b6e3847737a367930587069577a5077796c696f38544957332b43564c444259514c6c7763766a626e7147674e726d39422b6b36777a2f46417a766a6345315768597a35426775774442674973553074444a694f4b766c6a4e5261664d65462b4b4b6e5a547159594d6a4c4c76747a7159596a307a3879306642455355752b3078317849694a664e546a36&username=%E7%AD%89%E7%9D%80%E6%B5%B7%E7%BB%B5%E5%AE%9D%E5%AE%9D&phonenumber=&mail=&tpl=tb&u=https%3A%2F%2Fpassport.baidu.com%2F&needToModifyPassword=&gotourl=&auth=&error=257

除了error=257之外,还出现了

codestring=jxIcaptchaservice616462355546386b494679704d7678684f666d4d5645364a567a376c615563564e43795356514d774378374e63742f44596b367733625a7176766a41706a794f58435365586732506a73376a4f7877784f326442314469774e654575653558747a78657a756639336a2f77674c6f6e34415a396f445952356f326d454e6969325133656c5854754c727257442f796d7332676f4c61612f565946526148586758597a61502f697174715a686b2b5455332f56574f42522f5649415767504b6e3847737a367930587069577a5077796c696f38544957332b43564c444259514c6c7763766a626e7147674e726d39422b6b36777a2f46417a766a6345315768597a35426775774442674973553074444a694f4b766c6a4e5261664d65462b4b4b6e5a547159594d6a4c4c76747a7159596a307a3879306642455355752b3078317849694a664e546a36

这一串参数,似乎正好和验证码链接吻合,于是写了一段代码生成链接并获取图片:

vcodeMatch=re.search(r‘codestring=jxIcaptchaservice\S+&username‘,redirectURL)
vcodeNum=vcodeMatch.group(0)[11:-9]
vcodeUrl=‘https://passport.baidu.com/cgi-bin/genimage?‘+vcodeNum
vcodeRequest=urllib2.Request(vcodeUrl)
vcodeResponse=urllib2.urlopen(vcodeRequest)
with open(‘vcode.jpg‘,‘wb‘) as out:
    out.write(vcodeResponse.read())
    out.flush()
vcode=raw_input(u‘input vcode:‘)
rawData[‘verifycode‘]=vcode

rawData是post的数据,加上验证码时候再次post过去,测试的时候发现并没有登陆成功,变成了不停输入验证码= =

再次到网页上找原因,找到post传递的参数中

技术分享
除了verifycode之外还有个codestring,加到post参数里面就成功了
所以加上一句:

rawData[‘codestring‘]=vcodeNum

测试结果
技术分享

python爬虫解决百度贴吧登陆验证码问题

原文:http://blog.csdn.net/zhu_free/article/details/46445617

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!