前言
做爬虫时,难免会遇到需要通过验证码才能访问网址进行爬取内容,所以需要额外掌握破解验证码的技巧才行。
本文将讲解一个简单的验证码示例来进行演示(由数字或英文组成的验证码)
安装环境
pip install Pillowpip install tesserocr如果用tesseract-ocr(客户端) 版本下载地址:pip install tesserocr
安装tesserocr
模块失败出现报错,那么换作安装该模块对应的 “whl文件” ,下载地址:/simonflueckiger/tesserocr-windows_build/releases (根据tesseract-ocr(客户端)的版本下载对应的文件)安装命令如下:pip install xxx.whl
(后面跟上所下载的whl文件路径)
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 ” 为该软件的所在文件夹位置
②增加一个TESSDATA_PREFIX
变量名,变量值还是刚刚的安装路径 “F:\Tesseract-OCR\tessdata” 这是将语言字库文件夹添加到变量中
实例
解析如下图的验证码:
步骤:
》另存图片
》借助图片处理工具PIL
模块,进行图片处理(灰度图片)
》设置阈值,默认阈值为127(根据情况而改)
》借助图片处理工具PIL
模块,进行图片处理(二值化处理)
》再用tesserocr
模块进行解析
代码如下:
from PIL import Imageimport tesserocrimage = 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)。