python 使用 pytesseract 解析网站验证码

又回来喽!

因为某些原因,想用 python 抓一下网站玩玩,首先想要解析下网站的验证码,就找到了
pytesseract,没想这么简单 。当然搭环境和解析的时候也遇到了一些问题,在此感谢大神们写的博文的帮助,在此总结。

我只是博文的搬运工。

Win 下安装

  1. 安装 tesseract-ocr-setup-3.05.01.exe,下载地址 tesseract-ocr-setup-3.05.01.exe

  2. 双击安装,可以在安装过程中选择下载数据文件,下载速度很慢,也可以跳过下载,在安装后到网页上下载。

  3. 配置环境变量,否则运行为失败,注意配置完后要重启 IDE 或 命令窗口。详细参见博客: wanlifeipeng

  4. 如需要除英文外的其它语言,下载语言对应的数据文件,下载页面为:tesseract-ocr数据文件下载,然后放在安装目录的 tessdata/ 目录下。

  5. 安装 py 包 pytesseract

pip install pytesseract
  1. 写代码
import pytesseract
from PIL import Image

image = Image.open('../8318.jpg')
vcode = pytesseract.image_to_string(image)
print vcode
  1. 图片处理

如果图片干扰线太多,有边框,可以先对图片进行处理成比较纯洁的样子,然后再用 pytesseract 得到验证码。 详细见博文: 利用tesseract自动识别网站验证码

  1. 总代码
#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
image.png

可能会更新 Linux 下安装。

你可能感兴趣的:(python 使用 pytesseract 解析网站验证码)