版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ygdxt/article/details/83793746
最近在学爬虫,在模拟登录网站的时候常常需要输入验证码,最常见的就是OCR(Optical Character Recognition,光学字符识别) ,于是乎了解到tesserocr这个库,但是安装的过程可谓坎坷。
大致的过程可参考博客:崔庆才的个人博客,但是最好注意以下几点
- 将tesseract(注意不是tesserocr)的安装路径加入环境变量。
- 将tesseract安装目录下的tessdata文件夹复制到你python的安装路径中去。如下
3. 如果pip3 install tesserocr pillow失败,考虑使用下载whl文件安装,可参考我之前的一篇博文whl文件版本选择。
whl文件下载地址:https://github.com/simonflueckiger/tesserocr-windows_build/releases
下面给出一个实例,我在爬取学校教务系统数据用到的,这个系统我后面有空会详细展开,下面仅给出用于ocr部分的代码:
import requests
import os
import tesserocr
from PIL import Image
import re
from requests.exceptions import RequestException
headers ={
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
def download_image(url):
print('当前正在下载验证码图片',url)
try:
response = requests.get(url,headers=headers)
if response.status_code == 200:
save_image(response.content)
return None
except RequestException:
print('下载验证码图片出错',url)
return None
def save_image(content):
file_path = 'code.jpg'
if os.path.exists(file_path):
os.remove(file_path)
with open(file_path,"wb") as f:
f.write(content)
f.close()
def get_ocr():
download_image("http://csujwc.its.csu.edu.cn/verifycode.servlet")
image = Image.open("code.jpg")
image = image.convert('L')
threshold = 127
table =[]
for i in range(256):
if i<threshold:
table.append(0)
else:
table.append(1)
image = image.point(table,'1')
result = tesserocr.image_to_text(image)
result = re.sub('\s','',result)
result = result.lower()
if len(result)>4:
result = result[0:4]
print("result:"+result)
return result
if __name__ =="__main__":
get_ocr()