爬蟲入門之驗證碼的處理--------------------------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識別驗證碼的過程。 我們可以直接用簡單的圖形驗證碼得到結果, 也可以對驗證碼圖片做預處理來提高識別的準確度。

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