爬虫之验证码获取并识别
重装了电脑,误删了以前电脑上写的py文件,都是一点一滴呀。打算重新补一下,还好路飞的作业有,剩下就是自己的一些小练习。
学爬虫,有一个月了。从元旦期间刚刚开始接触,下载各种环境,软件。再到后来停滞不前,被什么xpath、beautifulsoup给挡路。之后又看了两天数据分析,总之就是静不下来,毫无章法。每天看看这,看看那。
昨天开始看验证码这块。写了一个cnki验证码
前期准备:安装pytesseract,pip即可
依赖软件:Tesseract-OCR
使用过程中会出错的地方:参考https://blog.csdn.net/showgea/article/details/82656515
pytesseract安装后,在python的Lib目录下site-packges下会生成一个pytesseract文件夹,文件夹中找到pytesseract.py,路径为:D:\Python36\Lib\site-packages\pytesseract,使用notepad之类软件打开pytesseract.py,找到如下两行:
# CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLY
tesseract_cmd = 'tesseract'
将tesseract_cmd = 'tesseract'修改为:tesseract_cmd = 'D:/Program Files (x86)/Tesseract-OCR/tesseract.exe'
表示tesseract_cmd配置的是你安装tesseract的绝对路径,这样就能找到tesseract了。修改后保存,再去运行python代码,就可以成功了。
from PIL import Image import pytesseract import requests from lxml import etree url = 'http://my.cnki.net/Register/CommonRegister.aspx?returnurl=%2f%2fwww.cnki.net%2f' headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3143.400 QQBrowser/9.6.11451.400' } def get_image(): response = requests.get(url=url,headers=headers) html = etree.HTML(response.text) src = html.xpath('//*[@id="checkcode"]//@src')[0] img_url = 'http://my.cnki.net/Register/'+src # print(img_url) img_res = requests.get(img_url,headers = headers) # print(img_res.content) f= open(r'D:\py\练习\爬虫\验证码\cnki.jpg','wb') f.write(img_res.content) def get_code(): image = Image.open(r'D:\py\练习\爬虫\验证码\cnki.jpg') image = image.convert('L') threshold = 150 table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) # print(table) image = image.point(table,'1') # image.show() text = pytesseract.image_to_string(image) return text get_image() print(get_code())
PIL是自带的,这里用了xpath。分两步:获取、识别
找到img的链接,打开写入本地。读取,做一些处理,二值化,识别率还可以。
开心

浙公网安备 33010602011771号