python程序18:聊一聊验证码,写一个识别程序

写爬虫有一个绕不过去的问题,那就是验证码。

先来看看,目前遇到的验证码种类有哪些?

1)图形验证码
图形验证码应该是最简单的一种验证码,这种验证码是最早出现,也是目前最常见的,一般组成规则是字母,数字或混合组成;

2)滑动验证码

想必大家都见过,滑动滑块匹配对应形状解锁。

3)点触验证码

按图片所给提示从中选出指定元素,目前是最主流也是防止bot最有效的方式了。

OCR,全称叫 Optical Character Recognition,中文翻译叫光学字符识别,是指通过扫描字符,通过其形状将其翻译成电子文本的过程;

举例:
当有一个图形验证码,先使用OCR技术将其转化成电子文本,然后爬虫将识别的结果提交到服务器,便达到自动识别验证码的过程;

tesseract
tesseract是google开源的OCR

识别图形验证码需要安装tesserocr这个库,下面介绍下tesserocr;
tesserocr是Python的一个OCR识别库,但其实是对tesseract做了一层Python Api的封装,
核心还是tesseract,所以在安装tesserocr之前,需要先安装tesseract。

windows下的安装

在Windows下,要先下载tesseract,它为tesserocr提供了支持;
tesseract下载地址:Index of /tesseract
打开后,可以看到各种exe的列表,可以随便挑选;
其中文件名中带有dev的为开发版本,不带dev则为稳定版本,例如jb是下载 tesseract-ocr-setup-3.05.01.exe;

下载后双击,一路点击,直到出现下面这个页面

这里需要勾选红框里的Additional language data(download),这个选项是安装OCR识别支持的语言包,这样OCR就可以识别多国语言,然后再一路点击NEXT即可,因为要下载语言包,所以需要点时间,大概10-20分钟左右,跟网速有关,如果不需要支持多国语言的话,也可以不勾选,自由选择


需要说明:默认包含英文字库


如果,觉得一次下载那么多语言占空间,又或者觉得网速慢,也可以选择单独安装中文字库;
字库下载地址:https://github.com/tesseract-ocr/tessdata
打开后,直接搜索chi_sim.traineddata,这个代表的就是中文,下载下来;
然后找到刚刚tesseract安装目录,里面会有一个叫tessdata的目录,直接把刚下载的语言包放到这个目录下即可;

如何验证tesseract是否安装成功?直接cmd下输入tesseract即可;
成功会直接显示信息;

如果提示’tesseract’ 不是内部或外部命令,则是因为没有配置环境变量,手动把tesseract根目录配置到path参数下即可,之前python教程有说到,参考即可;

到此为止,tesseract安装成功啦。

接下来就安装tesserocr,直接pip命令即可:

pip install tesserocr

如果是anaconda环境下需要通过下面这个:conda install -c simonflueckiger tesserocr 下载模块

为了方便测试,需要把验证码的图片保存到本地;
打开weibo.com,随便输入账号密码,会提示输入验证码,打开开发者工具(一般快捷键F12),找到验证码元素,它的src属性就是一个链接,copy出来直接打开,会看到一个验证码,而且刷新的验证码会变化,由此推断这是个验证码的接口,右键保存验证码即可,就得到一张验证码;
验证码链接:https://login.sina.com.cn/cgi/pin.php?r=9967937&s=0&p=gz-d0dc363f6a4523cbd602a5a10f00c59b4784
将这个验证码下载放到根目录下,用tesserocr库来识别验证码:

import tesserocr
from PIL import Image
 
#新建Image对象
image = Image.open("zym.jpg")
#调用tesserocr的image_to_text()方法,传入image对象完成识别
result = tesserocr.image_to_text(image)
print(result)

测试发现能够通过tesserocr图片识别得到对应的文字,感兴趣的同学可以尝试一下。

发表评论

zh_CNChinese