18 使用 Pytesseract 進行簡單的驗證
在爬蟲開發中我們經常會遇到一種反爬蟲的手段就是驗證碼,那麼如何才能繞過驗證碼拿到我們想要的資料呢?這節課我給大家介紹一個破驗證碼的利器–Pytesseract。
Pytesseract 是 Python 中專門用來識別驗證碼和字元的常用第三方模組,它是一個根據 Google 開發的 Tesseract 包進行獨立封裝的產物。由於它在識別驗證碼方面具有得天獨厚的優勢,所以經常被爬蟲開發程式設計師用來進行識別驗證碼。
本節課我們就來使用 pytesseract 進行簡單的驗證碼的識別。
1. 安裝 pytesseract
pytesseract 是 Python 的一個 OCR 識別庫,可以通過安裝這個模組,然後呼叫相應的方法進行驗證碼識別。我們只是使用這個模組的一些常用的 API,關於這個模組的其他用途,讀者可以根據自己的興趣愛好自行研究。
pytesseract 是第三方模組,所以需要提前安裝才能使用,安裝命令如下:
pip install pytesseract
安裝過程如下:
2. 第一個例子
我們先使用 pytesseract 進行簡單的圖片識別。使用圖片如下所示:
我們通過呼叫 image_to_string 方法來進行識別圖片中的文字。
# 引進Image和pytesseract模組
try:
from PIL import Image
except ImportError:
import Image
import pytesseract
# 將圖片轉化成文字
print(pytesseract. image_to_string(Image.open('test.bmp')))
執行結果:
可以看出,pytesseract 能夠準確的識別圖片的文字。
3. 識別驗證碼
接下來,我們來嘗試使用它來驗證驗證碼。驗證碼圖片如下所示:
程式碼如下:
import pytesseract
from PIL import Image
im=Image.open('test.jpeg')
#灰度處理
im=im.convert('L')
#設定二值化的閾值
threshold=170
t=[]
for i in range(256):
if i<threshold:
t. append(0)
else:
t.append(1)
#通過表格轉換成二進位制圖片,1的作用是白色,0就是黑色
im=im.point(t,"1")
im.show()
print(pytesseract.image_to_string(im))
#刪除冗餘字元
print(pytesseract.image_to_string(im)[0:-1])
執行結果:
從執行結果,我們可以看出,雖然我們使用了二值化進行了灰度處理,但是程式仍然不能 100% 的識別驗證碼,所以,後面我們刪除了識別錯誤產生的小數點,才是最後的結果。
4. 小結
使用 pytesseract 只能識別一些簡單的驗證碼,識別率也不高,需要匯入訓練好的各種語言包才能提高識別率。另外,如果熟悉機器學習的知識化,根據 pytesseract 提供的方法,可以通過深度學習的演算法自己訓練一個模型,然後進行識別,可以提高識別的準確度。