18 使用 Pytesseract 进行简单的验证

优质
小牛编辑
127浏览
2023-12-01

在爬虫开发中我们经常会遇到一种反爬虫的手段就是验证码,那么如何才能绕过验证码拿到我们想要的数据呢?这节课我给大家介绍一个破验证码的利器–Pytesseract

Pytesseract 是 Python 中专门用来识别验证码和字符的常用第三方模块,它是一个根据 Google 开发的 Tesseract 包进行独立封装的产物。由于它在识别验证码方面具有得天独厚的优势,所以经常被爬虫开发程序员用来进行识别验证码。

本节课我们就来使用 pytesseract 进行简单的验证码的识别。

1. 安装 pytesseract

pytesseract 是 Python 的一个 OCR 识别库,可以通过安装这个模块,然后调用相应的方法进行验证码识别。我们只是使用这个模块的一些常用的 API,关于这个模块的其他用途,读者可以根据自己的兴趣爱好自行研究。

pytesseract 是第三方模块,所以需要提前安装才能使用,安装命令如下:

pip install pytesseract

安装过程如下:

图片描述

2. 第一个例子

我们先使用 pytesseract 进行简单的图片识别。使用图片如下所示:
图片描述

我们通过调用 image_to_string 方法来进行识别图片中的文字。

# 引进Image和pytesseract模块
try:
    from PIL import Image
except ImportError:
    import Image
import pytesseract

# 将图片转化成文字
print(pytesseract.image_to_string(Image.open('test.bmp')))

运行结果:

图片描述
可以看出,pytesseract 能够准确的识别图片的文字。

3. 识别验证码

接下来,我们来尝试使用它来验证验证码。验证码图片如下所示:

图片描述

代码如下:

import pytesseract
from PIL import Image

im=Image.open('test.jpeg')
#灰度处理
im=im.convert('L')
#设置二值化的阈值
threshold=170
t=[]
for i in range(256):
    if i<threshold:
        t.append(0)
    else:
        t.append(1)
#通过表格转换成二进制图片,1的作用是白色,0就是黑色
im=im.point(t,"1")
im.show()
print(pytesseract.image_to_string(im))
#删除冗余字符
print(pytesseract.image_to_string(im)[0:-1])

运行结果:

图片描述

从运行结果,我们可以看出,虽然我们使用了二值化进行了灰度处理,但是程序仍然不能 100% 的识别验证码,所以,后面我们删除了识别错误产生的小数点,才是最后的结果。

4. 小结

使用 pytesseract 只能识别一些简单的验证码,识别率也不高,需要导入训练好的各种语言包才能提高识别率。另外,如果熟悉机器学习的知识化,根据 pytesseract 提供的方法,可以通过深度学习的算法自己训练一个模型,然后进行识别,可以提高识别的准确度。