網絡爬蟲進階之圖形驗證碼識別技術

圖形驗證碼識別技術:

阻礙咱們爬蟲的。有時候正是在登陸或者請求一些數據時候的圖形驗證碼。所以這裏咱們講解一種能將圖片翻譯成文字的技術。將圖片翻譯成文字通常被成爲光學文字識別(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)
相關文章
相關標籤/搜索