基于百度智能云api识别验证码
通过调用百度智能云api接口进行验证码识别并输出。
使用baidu-aip模块进行模拟client登录,client.basicgeneral()函数识别图片文字并返回图片数据
获取古诗词网的验证码,其验证码格式为gif格式,需要通过PIL包将保存的图片格式修改为png或者jpg格式。
注意:百度ocr文字识别的图片格式为:PNG、JPG、JPEG、BMP、TIFF、PNM、WebP
否则会报错:image format error
from aip import AipOcr
import requests
from lxml import etree
from PIL import Image
if __name__=='__main__':
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
# 获取网页源码
url = 'https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx'
page_text = requests.get(url=url,headers=headers).text
# 解析验证码图片img中src属性值
tree = etree.HTML(page_text)
code_img_src = 'https://so.gushiwen.org'+tree.xpath('//*[@id="imgCode"]/@src')[0]
# 读取图片数据并保存
img_data = requests.get(url=code_img_src,headers=headers).content
# 将验证码图片保存到了本地
# 此验证码为gif格式需要转换为jpg格式
with open('code.jpg', 'wb') as fp:
fp.write(img_data)
# 使用PIL模块下的Image函数,将gif格式的图片转化为png格式
Image.open('code.jpg').save('验证码.png')
i = open('验证码.png', 'rb')
# clinet登录所需数据
# 需要注册百度智能云获取
APP_ID = '2******'
API_KEY = 'dxrzPkvW*******'
SECRECT_KEY = '1eyXtBCPaabD********************'
client = AipOcr(APP_ID, API_KEY, SECRECT_KEY)
message = client.basicAccurate(i.read())
code_text=message['words_result'][0]['words']
print('识别结果为:',code_text)