最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年07月30日 14:35:54   作者:愛喝馬黛茶的安東尼  
在本篇內(nèi)容里小編給大家分享的是關(guān)于Python3爬蟲中識別圖形驗證碼的實例講解內(nèi)容,需要的朋友們可以學習參考下。

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

a0127ab16c0f31d7781e3cadafa4ab8.png

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

1.本節(jié)目標

本節(jié)我們就以知網(wǎng)的驗證碼為例,講解一下利用 OCR 技術(shù)識別此種圖形驗證碼的方法。

2. 準備工作

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

3. 獲取驗證碼

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

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

ab639aae49160a15847b83a5779b691.png

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

4. 識別測試

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

import tesserocr
from PIL import Image
image = Image.open('code.jpg')
result = tesserocr.image_to_text(image)
print(result)

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

JR42

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

import tesserocr
print(tesserocr.file_to_text('image.png'))

不過經(jīng)測試此種方法的識別效果不如上一種方法好。

5. 驗證碼處理

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

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

1a8a0b6b16372b48e23879d55fd5bdf.png

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

import tesserocr
from PIL import Image
image = Image.open('code2.jpg')
result = tesserocr.image_to_text(image)
print(result)

這時可以看到如下輸出結(jié)果:

FFKT

發(fā)現(xiàn)這次識別和實際的結(jié)果有所偏差,這是因為驗證碼內(nèi)的多余線條干擾了圖片的識別。

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

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

image = image.convert('L')
image.show()

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

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

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

image = image.convert('L')
threshold = 80
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
image = image.point(table, '1')
image.show()

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

fe4e8d65503415930aa9d6ad720f9f9.png

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

import tesserocr
from PIL import Image
image = Image.open('code2.jpg')
image = image.convert('L')
threshold = 127
table = []
for i 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)

即可發(fā)現(xiàn)運行結(jié)果變成了:

PFRT

識別正確。

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

6. 本節(jié)代碼

本節(jié)代碼地址為:https://github.com/Python3WebSpider/CrackImageCode。

7. 結(jié)語

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

以上就是Python3爬蟲中識別圖形驗證碼的實例講解的詳細內(nèi)容,更多關(guān)于Python3爬蟲識別圖形驗證碼的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python面向?qū)ο笾^承代碼詳解

    Python面向?qū)ο笾^承代碼詳解

    這篇文章主要介紹了Python面向?qū)ο笾^承代碼詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 詳解Python定時器Timer的使用及示例

    詳解Python定時器Timer的使用及示例

    這篇文章主要介紹了詳解Python定時器的使用及示例,Timer定時器源碼實現(xiàn),和自定義一個線程方式一樣,都是繼承Thread類,重寫了run()方法,只是實現(xiàn)的功能是延時執(zhí)行一個函數(shù)或方法,需要的朋友可以參考下
    2023-05-05
  • 8個實用的Python程序你知道幾個

    8個實用的Python程序你知道幾個

    這篇文章主要為大家詳細介紹了8個實用的Python程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2022-02-02
  • Python實現(xiàn)自動化接收與處理手機驗證碼

    Python實現(xiàn)自動化接收與處理手機驗證碼

    在移動互聯(lián)網(wǎng)時代,短信驗證碼已成為身份驗證、賬號注冊等環(huán)節(jié)的重要安全手段,本文將介紹如何利用Python實現(xiàn)驗證碼的自動接收,識別與轉(zhuǎn)發(fā),需要的可以參考下
    2025-03-03
  • python實現(xiàn)會員管理系統(tǒng)

    python實現(xiàn)會員管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)會員管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • python多進程和多線程究竟誰更快(詳解)

    python多進程和多線程究竟誰更快(詳解)

    下面小編就為大家?guī)硪黄猵ython多進程和多線程究竟誰更快(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • python使用chardet判斷字符串編碼的方法

    python使用chardet判斷字符串編碼的方法

    這篇文章主要介紹了python使用chardet判斷字符串編碼的方法,涉及Python編碼的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • 使用python復(fù)制PDF中的頁面的操作代碼

    使用python復(fù)制PDF中的頁面的操作代碼

    操作PDF文檔時,復(fù)制其中的指定頁面可以幫助我們從PDF文件中提取特定信息,如文本、圖表或數(shù)據(jù)等,以便在其他文檔中使用,本文將介紹如何使用Python 在同一文檔中復(fù)制PDF頁面,或者復(fù)制頁面到另一PDF文檔中,需要的朋友可以參考下
    2024-09-09
  • Python 使用with上下文實現(xiàn)計時功能

    Python 使用with上下文實現(xiàn)計時功能

    with 語句適用于對資源進行訪問的場合,確保不管使用過程中是否發(fā)生異常都會執(zhí)行必要的“清理”操作,釋放資源,比如文件使用后自動關(guān)閉、線程中鎖的自動獲取和釋放等。這篇文章主要介紹了Python 使用with上下文實現(xiàn)計時,需要的朋友可以參考下
    2018-03-03
  • Pyinstaller打包多個資源文件的超詳細教程(推薦!)

    Pyinstaller打包多個資源文件的超詳細教程(推薦!)

    Pyinstaller是著名python打包module,軟件或者小工具用python寫好后,用pyinstaller 可以實現(xiàn)輕松打包,下面這篇文章主要給大家介紹了關(guān)于Pyinstaller打包多個資源文件的超詳細教程,需要的朋友可以參考下
    2022-12-12

最新評論

伊宁县| 哈尔滨市| 山西省| 尖扎县| 河南省| 定结县| 嘉黎县| 天镇县| 仁布县| 浙江省| 天祝| 水富县| 高安市| 昭通市| 新化县| 西乌珠穆沁旗| 鄂尔多斯市| 无极县| 太仓市| 大兴区| 泌阳县| 犍为县| 开化县| 延安市| 涪陵区| 万荣县| 婺源县| 鹤山市| 读书| 张家口市| 阿巴嘎旗| 墨江| 饶平县| 韶山市| 奉新县| 加查县| 嵊泗县| 鹿泉市| 益阳市| 龙川县| 黄平县|