目前,很多網站都採取了各種各樣的反爬措施,其中之一便是使用驗證碼.隨著技術的發展,驗證碼卻來越複雜,花樣越來越多,爬蟲的工作也變得愈加複雜,本節將介紹圖形驗證碼的識別.
圖形驗證碼
我們首先將識別最簡單的驗證碼,圖形驗證碼.
目標
我們將以知網為例講解使用 OCR 技術識別圖形驗證碼.
準備
需要安裝 tesseract 和 tesserocr 庫,請看第一節和第二節內容.
獲取驗證碼
我們將從這裡獲取驗證碼:
然後點擊右鍵,將驗證碼圖片保存下來.
測試
我們新建一個文件 rec_simple_vcode.py 文件,然後將上面保存的圖片和此文件放在同一個路徑下:
我們創建了一個 Image 對象,調用了 tesserocr 庫的 image_to_text()方法,傳入該 image 即可識別.
另外 tesserocr 還可以使用 file_to_text()方法直接將圖片轉換為字符串.
處理
我們換一個驗證碼,將其命名為 code2.png.
重新用下面的代碼識別:
發現其輸出結果為:
識別錯誤,識別出來的字符串和實際結果有偏差,這是因為驗證碼內多餘的線條幹擾了圖片的識別.對於這種情況,我們需要進行額外的處理,比如灰度化、二值化等。我們可以使用 Image.convert('L)將圖片灰度化。
二值化:
還可以設置二值化的閾值.默認閾值為 127,我們先將圖片灰度化,然後指定閾值二值化.
看看這麼處理後的結果:
我們處理過後的圖片黑白分明,裡面幹擾的線條已經全部被除去,這是重新識別驗證碼:
識別結果如下: