激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python3爬蟲中識別圖形驗證碼的實例講解

Python3爬蟲中識別圖形驗證碼的實例講解

2020-07-31 00:03愛喝馬黛茶的安東尼 Python

在本篇內容里小編給大家分享的是關于Python3爬蟲中識別圖形驗證碼的實例講解內容,需要的朋友們可以學習參考下。

本節我們首先來嘗試識別最簡單的一種驗證碼,圖形驗證碼,這種驗證碼出現的最早,現在也很常見,一般是四位字母或者數字組成的,例如中國知網的注冊頁面就有類似的驗證碼,鏈接為:http://my.cnki.net/elibregister/commonRegister.aspx,頁面:

Python3爬蟲中識別圖形驗證碼的實例講解

表單的最后一項就是圖形驗證碼,我們必須完全輸入正確圖中的字符才可以完成注冊。

1.本節目標

本節我們就以知網的驗證碼為例,講解一下利用 OCR 技術識別此種圖形驗證碼的方法。

2. 準備工作

識別圖形驗證碼需要的庫有 Tesserocr,如果沒有安裝可以參考第一章的安裝說明。

3. 獲取驗證碼

為了便于實驗,我們先將驗證碼的圖片保存到本地,以供測試。

打開開發者工具,找到驗證碼元素,可以看到這是一張圖片,它的 src 屬性是 CheckCode.aspx,在這里我們直接將這個鏈接打開:http://my.cnki.net/elibregister/CheckCode.aspx,就可以看到一個驗證碼,直接右鍵保存下來即可,將名稱命名為 code.jpg,如圖 8-2 所示:

Python3爬蟲中識別圖形驗證碼的實例講解

這樣我們就可以得到一張驗證碼圖片供下面測試識別使用了。

4. 識別測試

接下來我們新建一個項目,將驗證碼圖片放到項目根目錄下,用 Tesserocr 庫來識別一下該驗證碼試試,代碼如下:

?
1
2
3
4
5
import tesserocr
from PIL import Image
image = Image.open('code.jpg')
result = tesserocr.image_to_text(image)
print(result)

在這里我們首先新建了一個 Image 對象,然后調用了 Tesserocr 的 image_to_text() 方法,傳入該 Image 對象即可完成識別,實現過程非常簡單,識別結果如下:

?
1
JR42

另外 Tesserocr 還有一個更加簡單的方法直接將圖片文件轉為字符串可以達到同樣的效果,代碼如下:

?
1
2
import tesserocr
print(tesserocr.file_to_text('image.png'))

不過經測試此種方法的識別效果不如上一種方法好。

5. 驗證碼處理

如上的圖片識別基本沒有難度,只是新建一個 Image 對象,然后調用 image_to_text() 方法即可得出圖片的識別結果。

接下來我們換一個驗證碼試一下,命名為 code2.jpg,如圖 8-3 所示:

Python3爬蟲中識別圖形驗證碼的實例講解

重新用下面的代碼測試一下:

?
1
2
3
4
5
import tesserocr
from PIL import Image
image = Image.open('code2.jpg')
result = tesserocr.image_to_text(image)
print(result)

這時可以看到如下輸出結果:

?
1
FFKT

發現這次識別和實際的結果有所偏差,這是因為驗證碼內的多余線條干擾了圖片的識別。

對于這種情況,我們還需要做一下額外的處理,如轉灰度、二值化等操作。

我們可以利用 Image 對象的 convert() 方法參數傳入 L 即可將圖片轉化為灰度圖像,代碼如下:

?
1
2
image = image.convert('L')
image.show()

傳入 1 即可將圖片進行二值化處理:

?
1
2
image = image.convert('1')
image.show()

另外我們還可以指定二值化的閾值,上面的方法采用的是默認閾值127,不過我們不能用原圖直接轉化,可以先轉為灰度圖像,然后再指定二值化閾值轉化,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
image = image.convert('L')
threshold = 80
table = []
for in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
image = image.point(table, '1')
image.show()

在這里我們指定了一個變量 threshold 代表二值化閾值,閾值設置為 80,處理之后我們看一下結果,如圖 8-4 所示:

Python3爬蟲中識別圖形驗證碼的實例講解

經過處理之后我們發現原來的驗證碼中的線條已經被去除了,而且整個驗證碼變得黑白分明,這時重新識別驗證碼,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import tesserocr
from PIL import Image
image = Image.open('code2.jpg')
image = image.convert('L')
threshold = 127
table = []
for in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
image = image.point(table, '1')
result = tesserocr.image_to_text(image)
print(result)

即可發現運行結果變成了:

?
1
PFRT

識別正確。

可見對于一些有干擾的圖片,我們做一些灰度和二值化處理,會提高其識別正確率。

6. 本節代碼

本節代碼地址為:https://github.com/Python3WebSpider/CrackImageCode

7. 結語

本節我們了解了利用 Tesserocr 識別驗證碼的過程,對于簡單的圖形驗證碼我們可以直接用它來得到結果,如果要提高識別的準確度還可以對驗證碼圖片做一下預處理。

以上就是Python3爬蟲中識別圖形驗證碼的實例講解的詳細內容,更多關于Python3爬蟲識別圖形驗證碼的資料請關注服務器之家其它相關文章!

原文鏈接:https://www.py.cn/spider/advanced/14441.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91精品国产91久久久久久吃药 | 久久久久久久久久一本门道91 | 久久久久女人精品毛片九一 | 欧美在线观看视频网站 | 精品中文一区 | h色视频网站 | 男女污视频在线观看 | 美女久久久久 | 国产精品亚洲激情 | 婷婷一区二区三区 | 国产毛毛片一区二区三区四区 | 日韩视频在线一区二区三区 | 一级黄色大片在线观看 | 亚洲精品久久久久久久久久久 | 中国漂亮护士一级a毛片 | 欧美在线观看视频网站 | 久国久产久精永久网页 | 91精品最新国内在线播放 | 国产高潮失禁喷水爽到抽搐视频 | 91 免费视频 | 中文字幕在线免费 | 久草视频在线资源 | 激情小说激情电影 | 一区二区三区四区五区中文字幕 | 视频国产一区二区 | 亚洲精品欧美二区三区中文字幕 | 中国洗澡偷拍在线播放 | 欧美日韩一区,二区,三区,久久精品 | 奶子吧naiziba.cc免费午夜片在线观看 | 日韩黄色一区 | 成年免费视频黄网站在线观看 | 国内精品久久久久久2021浪潮 | 免费放黄网站在线播放 | 高清国产福利 | 欧美亚洲国产一区二区三区 | 亚洲va久久久噜噜噜久牛牛影视 | 成人精品免费在线观看 | 久久久久一区 | 涩涩伊人| 九九视频精品在线 | 国产a级网站|