又回来喽!
因为某些原因,想用 python 抓一下网站玩玩,首先想要解析下网站的验证码,就找到了
pytesseract,没想这么简单 。当然搭环境和解析的时候也遇到了一些问题,在此感谢大神们写的博文的帮助,在此总结。
我只是博文的搬运工。
Win 下安装
安装 tesseract-ocr-setup-3.05.01.exe,下载地址 tesseract-ocr-setup-3.05.01.exe
双击安装,可以在安装过程中选择下载数据文件,下载速度很慢,也可以跳过下载,在安装后到网页上下载。
配置环境变量,否则运行为失败,注意配置完后要重启 IDE 或 命令窗口。详细参见博客: wanlifeipeng
如需要除英文外的其它语言,下载语言对应的数据文件,下载页面为:tesseract-ocr数据文件下载,然后放在安装目录的 tessdata/ 目录下。
安装 py 包 pytesseract
pip install pytesseract
- 写代码
import pytesseract
from PIL import Image
image = Image.open('../8318.jpg')
vcode = pytesseract.image_to_string(image)
print vcode
- 图片处理
如果图片干扰线太多,有边框,可以先对图片进行处理成比较纯洁的样子,然后再用 pytesseract 得到验证码。 详细见博文: 利用tesseract自动识别网站验证码
- 总代码
#coding=utf-8
import pytesseract
from PIL import Image
image = Image.open('../qv9j.jpg')
img = image.convert('RGBA')
pix = img.load()
for x in range(img.size[0]): # 处理上下黑边框,size[0]即图片长度
pix[x, 0] = pix[x, img.size[1] - 1] = (255, 255, 255, 255)
for y in range(img.size[1]): # 处理左右黑边框,size[1]即图片高度
pix[0, y] = pix[img.size[0] - 1, y] = (255, 255, 255, 255)
for y in range(img.size[1]): # 二值化处理,这个阈值为R=95,G=95,B=95
for x in range(img.size[0]):
if pix[x, y][0] < 150 or pix[x, y][1] < 150 or pix[x, y][2] < 150:
pix[x, y] = (0, 0, 0, 255)
else:
pix[x, y] = (255, 255, 255, 255)
img.save('VCode_frame.jpg')
vcode = pytesseract.image_to_string(img)
print vcode
可能会更新 Linux 下安装。