当前位置:   article > 正文

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

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

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

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

再次到网页上找原因。找到post传递的參数中

这里写图片描写叙述
除了verifycode之外还有个codestring。加到post參数里面就成功了
所以加上一句:

rawData['codestring']=vcodeNum
  • 1

測试结果
这里写图片描写叙述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/646496
推荐阅读
相关标签
  

闽ICP备14008679号