作为贴吧重度用户,写了个贴吧爬虫脚本
抄了一些别人的代码,记得有个验证码解决的,但是忘了链接了,今天终于自己解决了。
首先要让登陆需要验证码,不停地登陆就好了。。。度娘很快会加上验证码大法的。。。需要验证码的情况下,直接登陆返回的错误信息是error=257
打开贴吧首页选择登陆,弹出验证码,找到验证码的链接是
右键在新标签页中打开
注意到链接是
https://passport.baidu.com/cgi-bin/genimage?jxIcaptchaservice+一串字母数字
这个时候根据之前写的代码,判定登陆成功是根据post登录数据之后返回的一串链接,链接格式是这样:
最后面的error=0代表没有错误,登陆成功,当需要验证码时,返回的链接redirectURL大约是这样的
除了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
测试结果
原文地址:http://blog.csdn.net/zhu_free/article/details/46445617