爬蟲入門之驗證碼的處理--------------------------pytesseract庫的使用
前言
目前有許多網站針對爬蟲採取了多種多樣的措施進行反爬蟲,為了不降低使用者的體驗度同時還能將爬蟲攔截在網站之外的一個簡單的措施就是驗證碼。隨著技術的發展,驗證碼的種類也越來越多了,圖形拼接、數字組合、簡單的數學問題、點選圖中的文字等等以及在文字渲染的同時加入干擾線條來增大爬取資訊的難度。驗證碼也隨之變得越來越複雜了,爬蟲工作也變得越來越有挑戰性了。
1.1 圖形驗證碼的識別
在這裡我們採用簡單的驗證碼作為例項
如圖1.1所示
圖1.1碼雲註冊頁面
點選驗證碼將驗證碼圖片儲存至本地將其命名為code.jpg。這樣我們就得到一張驗證碼圖片,以供我們測試識別使用。
圖1.2 驗證碼
下面我們新建一個專案,將我們得到的驗證碼圖片存放至我們的根目錄下,用pytesseract庫識別該驗證碼,程式碼如下:
import pytesseract from PIL import Image # 讀取驗證碼圖片 image = Image.open('code.jpg') # 讀取驗證碼圖片中的資料 res = pytesseract.image_to_string(image) print(res)
在這裡我們建立有image物件,呼叫了pytesseract的image_to_string()方法。傳入該image物件,即可完成識別,實現過程非常簡單。但是識別結果準確率不敢恭維。
執行結果為:aynw
如果你們按照上步驟出現如圖錯誤了
不要著急 我教你如何解決這個bug
安裝 這個軟體 一路預設軟體連結如下
連結:https://pan.baidu.com/s/1jz0-IqhHtZWRwJ2jXJEYSA
提取碼:86lh
然後在你的程式碼中選中你匯入的pytesseract Ctrl+b 進入之後再次ctrl+b
將你安裝的軟體路徑複製下來
修改為如圖中所示即可
對於跟實際結果有偏差的,我們還要做一下額外處理,如轉灰度、二值化等操作。我們也可以利用Image物件的convert()方法引數傳入L,即可將圖片轉化為灰度影象。程式碼如下:
import pytesseract
from PIL import Image
image = Image.open('code.jpg')
image = image.convert('L')
image.show()
res = pytesseract.image_to_string(image)
print(res)
傳入 l 即可將圖片進行二值化處理,如下所示:
image = image.convert(’1’)
image. show()
我們還可以指定二值化的闊值。 上面的方法採用的是預設闊值 127。 不過我們不能直接轉化原因, 要將原圖先轉為灰度影象,然後再指定二值化闊值,程式碼如下所示:
image = image. convert(' L' )
threshold = 80
table = []
for i in range(256):
if i < threshold:
table.append(o)
else: table.append(l)
image = image.point(table,’1' )
image. show()
本節我們瞭解了利用pytesseract識別驗證碼的過程。 我們可以直接用簡單的圖形驗證碼得到結果, 也可以對驗證碼圖片做預處理來提高識別的準確度。