破解验证码(1) 数字英文验证码

前言

做爬虫时,难免会遇到需要通过验证码才能访问网址进行爬取内容,所以需要额外掌握破解验证码的技巧才行。
本文将讲解一个简单的验证码示例来进行演示(由数字或英文组成的验证码

安装环境

  • pip install Pillow
  • pip install tesserocr
  • 如果用 pip install tesserocr 安装 tesserocr模块失败出现报错,那么换作安装该模块对应的 “whl文件” ,下载地址:https://github.com/simonflueckiger/tesserocr-windows_build/releases (根据tesseract-ocr(客户端) 的版本下载对应的文件)
  • 安装命令如下:pip install xxx.whl (后面跟上所下载的whl文件路径)
  • tesseract-ocr(客户端) 版本下载地址:
    https://digi.bib.uni-mannheim.de/tesseract/【本教程用的版本是4.0.0】
  • tesseract-ocr 各版本语言包下载地址:
    https://tesseract-ocr.github.io/tessdoc/Data-Files【注意:根据版本下载对应字库】

修改环境变量

安装完 tesseract-ocr(客户端) 后,到计算机环境变量中添加该软件所在的文件夹,例如:
① “ F:\Tesseract-OCR ” 为该软件的所在文件夹位置
破解验证码(1) 数字英文验证码_第1张图片
②增加一个 TESSDATA_PREFIX 变量名,变量值还是刚刚的安装路径 “F:\Tesseract-OCR\tessdata” 这是将语言字库文件夹添加到变量中
破解验证码(1) 数字英文验证码_第2张图片

实例

解析如下图的验证码:
在这里插入图片描述
步骤:
》另存图片
》借助图片处理工具PIL模块,进行图片处理(灰度图片)
》设置阈值,默认阈值为127(根据情况而改)
》借助图片处理工具PIL模块,进行图片处理(二值化处理)
》再用tesserocr模块进行解析

代码如下:

from PIL import Image
import tesserocr

image = Image.open("1.png")
image = image.convert("L")      # 转化为灰度图片
threshold = 130     # 设置阈值

my = []
for i in range(256):
    if i < threshold:
        my.append(0)
    else:
        my.append(1)

image = image.point(my, "1")    # 二值化处理
# image.show()  #可以打印出图片,供预览
result = tesserocr.image_to_text(image)
print(result)

解析:
》使用灰度图片,设置阈值,进行二值化处理,最终显示的图片效果如下:
在这里插入图片描述
定义:图像的二值化,就是将图像上的像素点的灰度值设置为 0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果 [用0和1表示,0为白,1为黑]

一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群 和 小于T的像素群。这是研究灰度变换的最特殊的方法,称为图像的二值化(Binarization)。

你可能感兴趣的:(爬虫)