python爬⾍之识别图⽚验证码
识别图⽚验证码
1.识别流程
1. 获取图⽚⽣成的url,进⽽获取要识别的验证码
2. 通过第三⽅库识别验证码
3. 输出识别结果
2.识别⽅法
我们这⾥通过chaojiying(付费,识别度⾼)和Tesseract(免费,对于中⽂识别程度较差)进⾏识别。
3.操作
3.1.基本框架
我们以登陆⼈⼈⽹为例,进⾏识别验证码的操作。
⾸先,我们进⼊⼈⼈⽹,获取⼈⼈⽹验证码图⽚的地址,
注意,这⾥rnd是随机⽣成的因此,我们需要⽤random模块,随机输出。
我们登录⼈⼈⽹,并通过fiddler⼯具获取登录所需要的相关参数。以下是除识别验证码代码的基本框架,
import requests
import random
headers ={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.47 8.56",
}
def get_code():
url ="/getcode.do?t=web_login&rnd={}".format(random.random())
# 使⽤random.random()格式化url地址
res = (url, headers=headers)
# 保存图⽚,⼆进制写⼊
with open('code.jpg','wb')as fp:
fp.t)
fp.flush()# 不⽤回车就往⾥写
session如何设置和读取"""
识别验证码区域代码(待完成)
"""
def login(code):
# 通过fiddler抓取相关参数和传⼊参数的地址
url ="/ajaxLogin/login?1=1&uniqueTimestamp=202063121980"
data ={
'email':'账号',
'password':'密码',
'icode': code,# 识别出的验证码结果
'origURL':'/home',
'domain':'renren',
'kwy_id':1,
'captcha_type':'web_login',
'f':'/974712722',# 跳转地址
}
res = session.post(url, headers=headers, data=data)
# session对象保存了我们登陆后的信息,后期请求个⼈中⼼是携带着登陆信息的
res = t.decode()
print(res)
def get_profile():
url ="/974712722/profile"
res = (url, headers=headers)
result = t.decode()
print(result)
if __name__ =='__main__':
session = requests.session()# 创建⼀个session对象存放会话数据
# 获取验证码图⽚,交给第三⽅打码平台进⾏识别
code = get_code()
# 登录
login(code)
# 获取个⼈中⼼页
get_profile()
3.2.chaojiying识别图⽚验证码
我们登录,并注册。
进⼊开发⽂档,下载python开发⽂档。解压,放⼊python⽂件⽬录。
以下为识别图⽚验证码的代码,
chaojiying = Chaojiying_Client('超级鹰⽤户名','密码','软件ID')# ⽤户中⼼>>软件ID ⽣成软件ID
im =open('code.jpg','rb').read()# 读取图⽚
result = chaojiying.PostPic(im,1902)['pic_str']# 识别验证码
return result  # 返回验证码
3.3.Tesseract识别图⽚验证码
Tesseract是⼀个OCR库,⽬前由⾕歌赞助。Tesseract是⽬前公认最优秀、最准确的开源OCR库。Tesseract具有很⾼的识别度,也具有很⾼的灵活性,他可以通过训练识别任何字体。
安装包。
安装完成后,我们需要将Tesseract安装位置添加到Path环境变量中。
我们可以在cmd中使⽤代码实现识别图⽚内容,
tesseract 图⽚路径结果存放路径
在python中,我们需要先安装pytesseract,
pip install pytessseract
使⽤以下代码来识别图⽚,
import pytesseract
from PIL import Image  # 安装pillow
sseract_cmd = 位置路径"# 设置位置路径
image = Image.open('code.jpg')# 打开图⽚
text = pytesseract.image_to_string(image, lang='eng')# 识别
print(text)
如果要⽤Tesseract识别中⽂,需要在中的tessdata_best⽂件中下载aineddata训练数据并将其放⼊Tesseract安装⽬录中的tessdata⽂件夹下。
注意,因为中⽂训练数据过于陈旧,因此中⽂识别准确度不⾼。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。