Python網絡爬蟲(十六)——Tesseract

對於用戶來說,當然希望自己的爬蟲能夠爬取到自己想要的資源,但是對於服務來說,有時候卻並不希望自己服務器上的資源那麼輕易的被爬蟲獲取到。因此就出現了反爬蟲,圖形驗證碼就是這樣一種機制。

各種驗證碼可以說是判斷操作者是人還是機器的一個重要手段,而光學文字識別(Optical Character Recognition,OCR)可以或多或少解決這個問題。

Tesseract

Tesseract 是一個 OCR 庫,通過訓練該庫可以識別任何字體。

安裝

該項目的 github 地址爲:https://github.com/tesseract-ocr/tesseract

設置環境變量

安裝完成之後,爲了在全局都能夠使用 tesseract,需要設置環境變量,與平常不同,該軟件除了需要將 tesseract 所在的目錄添加到環境變量中,還需要另外設置一個名爲 TESSDATA_PREFIX 的環境變量,該環境變量的值爲 .traineddata 訓練數據集的所在目錄。

在 cmd 中使用 tesseract

環境變量設置完成之後,就可以在終端中使用 tesseract 進行操作了,使用方法爲:

tesseract imgpath txtpath

上邊的命名會啓動 tesseract,識別 imgpath 指向的圖片,並將識別後的結果保存到 txtpath 中,一般情況下可以不用指定 txtpath 的文件名,系統會自動添加文件擴展名。

pytesseract

基本使用

import pytesseract
from PIL import Image

# tesseract 路徑
pytesseract.pytesseract.tesseract_cmd = r'D:\Tesseract\Tesseract-OCR\tesseract.exe'
image = Image.open('000.jpg')
# 將識別的圖片轉換爲 string
text = pytesseract.image_to_string(image)
print(text)

識別圖形驗證碼

使用 tesseract 識別網站圖形驗證碼的邏輯也很簡單:

  • 使用 urllib 或 requests 發送請求
  • 將 response 中的圖形驗證碼解析出來,並保存到本地
  • 在本地利用 pytesseract 庫識別圖形驗證碼

但是由於 tesseract 並不能夠保證百分百識別正確,因此也不能保證 pytesseract 識別的結果是正確的。

同時在本地識別出的圖形驗證碼,就算識別正確,由於時效等原因,也不能將識別結果輸入到對應的文本框中,因此在爬蟲應用中感覺也用的不多。

通常遇到圖形驗證碼的情況,還是會選擇利用 selenium+chromedriver 模擬瀏覽器行爲,通過鍵盤輸入以保證結果的準確性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章