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

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

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

首先要让登陆需要验证码,不停地登陆就好了。。。度娘很快会加上验证码大法的。。。需要验证码的情况下,直接登陆返回的错误信息是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?’+vcodeNumvcodeRequest=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爬虫解决百度贴吧登陆验证码问题

相关文章:

你感兴趣的文章:

标签云: