网络爬虫进阶之图形验证码识别技术

图形验证码识别技术:

阻碍咱们爬虫的。有时候正是在登陆或者请求一些数据时候的图形验证码。所以这里咱们讲解一种能将图片翻译成文字的技术。将图片翻译成文字通常被成为光学文字识别(Optical Character Recognition),简写为OCR。实现OCR的库不是不少,特别是开源的。由于这块存在必定的技术壁垒(须要大量的数据、算法、机器学习、深度学习知识等),而且若是作好了具备很高的商业价值。所以开源的比较少。这里介绍一个比较优秀的图像识别开源库:Tesseractlinux

Tesseract:

Tesseract是一个OCR库,目前由谷歌赞助。Tesseract是目前公认最优秀、最准确的开源OCR库。Tesseract具备很高的识别度,也具备很高的灵活性,他能够经过训练识别任何字体。git

安装:

Windows系统:

在如下连接下载可执行文件,而后一顿点击下一步安装便可(放在不须要权限的纯英文路径下):
https://github.com/tesseract-ocr/github

Linux系统:

能够在如下连接下载源码自行编译。
https://github.com/tesseract-ocr/tesseract/wiki/Compiling
或者在ubuntu下经过如下命令进行安装:算法

sudo apt install tesseract-ocr

Mac系统:

Homebrew便可方便安装:shell

brew install tesseract

设置环境变量:

安装完成后,若是想要在命令行中使用Tesseract,那么应该设置环境变量。MacLinux在安装的时候就默认已经设置好了。在Windows下把tesseract.exe所在的路径添加到PATH环境变量中。ubuntu

还有一个环境变量须要设置的是,要把训练的数据文件路径也放到环境变量中。
在环境变量中,添加一个TESSDATA_PREFIX=C:\path_to_tesseractdata\teseractdatawindows

在命令行中使用tesseract识别图像:

若是想要在cmd下可以使用tesseract命令,那么须要把tesseract.exe所在的目录放到PATH环境变量中。而后使用命令:tesseract 图片路径 文件路径
示例:app

tesseract a.png a

那么就会识别出a.png中的图片,而且把文字写入到a.txt中。若是不想写入文件直接想显示在终端,那么不要加文件名就能够了。机器学习

在代码中使用tesseract识别图像:

Python代码中操做tesseract。须要安装一个库,叫作pytesseract。经过pip的方式便可安装:学习

pip install pytesseract

 

而且,须要读取图片,须要借助一个第三方库叫作PIL。经过pip list看下是否安装。若是没有安装,经过pip的方式安装:

pip install PIL

 

使用pytesseract将图片上的文字转换为文本文字的示例代码以下:

# 导入pytesseract库
import pytesseract
# 导入Image库
from PIL import Image

# 指定tesseract.exe所在的路径
pytesseract.pytesseract.tesseract_cmd = r'D:\ProgramApp\TesseractOCR\tesseract.exe'

# 打开图片
image = Image.open("a.png")
# 调用image_to_string将图片转换为文字
text = pytesseract.image_to_string(image)
print(text)

 

pytesseract处理拉勾网图形验证码:

import pytesseract
from urllib import request
from PIL import Image
import time


pytesseract.pytesseract.tesseract_cmd = r"D:\ProgramApp\TesseractOCR\tesseract.exe"


while True:
    captchaUrl = "https://passport.lagou.com/vcode/create?from=register&refresh=1513081451891"
    request.urlretrieve(captchaUrl,'captcha.png')
    image = Image.open('captcha.png')
    text = pytesseract.image_to_string(image,lang='eng')
    print(text)
    time.sleep(2)
相关文章
相关标签/搜索