python 爬虫,关于验证码的问题。输入验证码才能搜索。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 爬虫,关于验证码的问题。输入验证码才能搜索。相关的知识,希望对你有一定的参考价值。

像图片里面那种,我输入验证码之后,页面上还存在验证码。我用爬虫取到的验证码总是错误(和图片是一样的),所以请问怎么解决?

#给你个例子参考 验证码请求一次就变了
#!/usr/bin/python  
#coding=utf-8  
import requests
import urllib  
import urllib2,hashlib,md5
from BeautifulSoup import BeautifulSoup
import cookielib

def _md5(password):
    md5 = hashlib.md5() 
    md5.update(str.encode(password))
    psw = md5.hexdigest()
    return psw
url = 'https://passport.liepin.com/captcha/randomcode?2hy270c2ji1'
req = urllib2.Request(url)
res_data = urllib2.urlopen(req)
res = res_data.read()
output_file = open('1.jpg', 'wb')  
output_file.writelines(res)  
output_file.close()
verifycode =  res_data.headers['Set-Cookie'].split(';')[0]
verifycode = verifycode.replace('verifycode=','')
filename = res_data.headers['Content-disposition'].split(';')[1].strip()
exec(filename)

cookiejar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
vidcode= raw_input(u"请输入验证码(在本路径 1.jpg): ") 
data = 'user_login':"lovesword85@yeah.net",
        'isMd5':"1",
        'user_pwd':_md5('love123456'),
        'verifycode':vidcode,
        'url':""

url = 'https://passport.liepin.com/h/login.json'
data = urllib.urlencode(data)
headers = 'Content-Type': 'application/x-www-form-urlencoded', 'X-Requested-With': 'XMLHttpRequest', 'Cookie': 'verifycode=0;'.format(verifycode)
request = urllib2.Request(url,data,headers)
response = opener.open(request)
print '-------result-------------'
print response.read()
print '-------headers-------------'
print response.headers
print '-------cookies-------------'
for cookie in cookiejar:
    print cookie

参考技术A 一直用的事618代理软件ip转换器
支持动态静态ip线路
不知道国内最好的是哪款,身边大多人都用618软件,评价挺好的
参考技术B post验证码,一般是需要带上cookie的追问

cookie都带上了,只要我右键查看源代码,点开验证码图片链接看过图片之后,再次输入这个验证码就会提示错误了。

追答

那我就帮不上你了呢 亲 抱歉哈

python爬虫中图形验证码的处理

使用python爬虫自动登录时,遇到需要输入图形验证码的情况,一个比较简单的处理方法是使用打码平台识别验证码。

使用过两个打码平台,打码兔和若快,若快的价格更便宜,识别率相当。若快需要注册两个帐号:开发者帐号与用户帐号,用户帐号用于发送识别请求,开发者帐号可以注册软件id,并于识别请求进行绑定,可以参与识别收入的分成返现。

获取图形验证码目前发现的有两种方式:

0x01 

在抓包中可以直接获得图片:发送get请求可以直接获取图片(png或jpg格式),这种情况可以使用request.get()返回值的content方法,获取图片文件,直接使用打码平台识别。

0x02

图片使用base64加密返回:

技术分享

如上图,image中包含的就是经过base64加密后的图片文件。可以通过如下方式对图片进行还原:

        resp = self.s.get(url, headers=header, verify=False, timeout=10)
        resp_json=json.loads(resp.text)
        CaptchaId=resp_json.get(CaptchaId)
        ImageStr=resp_json.get(Image)
        imgdata=base64.b64decode(ImageStr)
        file=open(captcha.gif),wb)
        file.write(imgdata)
        file.close()

图片格式不一定是gif,可能是jpg或png,如果写错了,结果无法打开,可以通过网上在线的图片解码网站验证一下图片格式。

 

以上是关于python 爬虫,关于验证码的问题。输入验证码才能搜索。的主要内容,如果未能解决你的问题,请参考以下文章

Python3网络爬虫实战-41图形验证码的识别

Python3网络爬虫实战-42图形验证码的识别

英文,数字和中文混合的彩色验证码实现

python爬虫scrapy之登录知乎

Python3网络爬虫实战-43极验滑动验证码的识别

Python 实现识别弱图片验证码