爬蟲如何解決圖片驗證碼問題

第一步安裝

Tesserocr的安裝
爬蟲過程中難免會遇到各種各樣的驗證碼,而大多數(shù)驗證碼還是圖形驗證碼,這時候我們可以直接用 OCR 來識別。

OCR

OCR,即 Optical Character Recognition,光學(xué)字符識別。是指通過掃描字符,然后通過其形狀將其翻譯成電子文本的過程。那么對于圖形驗證碼來說,它都是一些不規(guī)則的字符,但是這些字符確實是由字符稍加扭曲變換得到的內(nèi)容。

例如這樣的驗證碼


image.png
image.png

對于這種驗證碼,我們便可以使用 OCR 技術(shù)來將其轉(zhuǎn)化為電子文本,然后爬蟲將識別結(jié)果提交給服務(wù)器,便可以達(dá)到自動識別驗證碼的過程。
Tesserocr 是 Python 的一個 OCR 識別庫,但其實是對 Tesseract 做的一層 Python API 封裝,所以它的核心是 Tesseract,所以在安裝 Tesserocr 之前我們需要先安裝 Tesseract,本節(jié)我們來了解下它們的安裝方式。

相關(guān)鏈接

Windows下的安裝

在 Windows 下,首先需要下載 Tesseract,它為 Tesserocr 提供了支持,下載鏈接為:http://digi.bib.uni-mannheim.de/tesseract/。
點擊進(jìn)入之后可以看到有各種 exe 的下載列表,在這里可以選擇下載 3.0 版本,如圖 1-24 所示為 3.05 版本。

image.png

其中文件名中帶有 dev 的為開發(fā)版本,不帶 dev 的為穩(wěn)定版本,可以選擇下載不帶 dev 的最新版本,例如可以選擇下載 tesseract-ocr-setup-3.05.01.exe。

下載完成之后雙擊安裝即可,會出現(xiàn)如圖:


image.png

在安裝過程中可以勾選上 Additional language data 選項,安裝 OCR 識別支持的語言包,這樣 OCR 便可以識別多國語言。
接下來再安裝 Tesserocr 即可,直接使用 Pip 安裝:

pip install tesserocr pillow

Linux下的安裝

Linux下的安對于 Linux 來說,不同系統(tǒng)已經(jīng)有了不同的發(fā)行包了,它可能叫做 tesseract-ocr 或者 tesseract,直接用對應(yīng)的命令安裝即可。

Ubuntu、Debian、Deepin

安裝命令如下:

sudo apt-get install -y tesseract-ocr libtesseract-dev libleptonica-dev裝

CentOS、RedHat

安裝命令如下:

yum install -y tesseract
不同發(fā)行版本運行如上命令即可完成 Tesseract 的安裝。
安裝完成之后便可以調(diào)用 tesseract 命令了。

我們查看一下其支持的語言:

tesseract --list-langs

運行結(jié)果示例:

List of available languages (3):
eng
osd
equ

結(jié)果顯示其只支持幾種語言,如果我們想要安裝多國語言還需要安裝語言包,官方叫做 tessdata。

tessdata 的下載鏈接為:https://github.com/tesseract-ocr/tessdata

利用 Git 命令將其下載下來并遷移到相關(guān)目錄即可,不同的版本遷移命令如下:

Ubuntu、Debian、Deepin

git clone https://github.com/tesseract-ocr/tessdata.git
sudo mv tessdata/* /usr/share/tesseract-ocr/tessdata

CentOS、RedHat

git clone https://github.com/tesseract-ocr/tessdata.git
sudo mv tessdata/* /usr/share/tesseract/tessdata

這樣就可以將下載下來的語言包全部安裝了。
這時我們重新運行列出所有語言的命令:

tesseract --list-lang:

結(jié)果如下:

List of available languages (107):
afr
amh
ara
asm
aze
aze_cyrl
bel
ben
bod
bos
bul
cat
ceb
ces
chi_sim
chi_tra

即可發(fā)現(xiàn)其列出的語言就多了非常多,比如 chi_sim 就代表簡體中文,這就證明語言包安裝成功了。
接下來再安裝 Tesserocr 即可,直接使用 Pip 安裝:

pip install tesserocr pillow

Mac下的安裝

Mac 下首先使用 Homebrew 安裝 Imagemagick 和 Tesseract 庫:

brew install imagemagick
brew install tesseract --all-languages

接下來再安裝 Tesserocr 即可:

pip3 install tesserocr pillow

這樣我們便完成了 Tesserocr 的安裝。

驗證安裝

接下來我們可以使用 Tesseract 和 Tesserocr 來分別進(jìn)行測試。
下面我們以如下的圖片為樣例進(jìn)行測試,如圖 1-26 所示:


image.png

圖片鏈接為:https://raw.githubusercontent.com/Python3WebSpider/TestTess/master/image.png,可以直接保存或下載。

我們首先用命令行進(jìn)行測試,將圖片下載保存為 image.png,然后用 Tesseract 命令行測試,命令如下:

tesseract image.png result -l eng && cat result.txt

運行結(jié)果:

Tesseract Open Source OCR Engine v3.05.01 with Leptonica
Python3WebSpider

我們調(diào)用了 tesseract 命令,第一個參數(shù)為圖片名稱,第二個參數(shù) result 為結(jié)果保存的目標(biāo)文件名稱,-l 指定使用的語言包,在此使用 eng 英文,然后再用 cat 命令將結(jié)果輸出。
第二行的運行結(jié)果便是圖片的識別結(jié)果,Python3WebSpider。
我們可以看到這時已經(jīng)成功將圖片文字轉(zhuǎn)為電子文本了。
然后我們還可以利用 Python 代碼來測試,這里就需要借助于 Tesserocr 庫了,測試代碼如下:

import tesserocr
from PIL import Image
image = Image.open('image.png')
print(tesserocr.image_to_text(image))

在這里我們首先利用 Image 讀取了圖片文件,然后調(diào)用了 tesserocr 的 image_to_text() 方法,再將將其識別結(jié)果輸出。

運行結(jié)果:

Python3WebSpider

另外我們還可以直接調(diào)用 file_to_text() 方法,也可以達(dá)到同樣的效果:

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

運行結(jié)果:

Python3WebSpider

如果成功輸出結(jié)果,則證明 Tesseract 和 Tesserocr 都已經(jīng)安裝成功。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,236評論 3 119
  • 初識“度”字,來源于老爸的敦敦教誨:“火可以把飯煮熟,也可以把飯煮糊(四川話:燒焦的意思),度是很重要的。...
    舟一持閱讀 247評論 1 0
  • 小編:許多美滿的戀愛終結(jié)于距離的差距。異地戀的艱辛莫過于獨自一人所要面對一切的艱辛。當(dāng)孤獨,無助變成全世界你還能不...
    星空人生閱讀 572評論 0 0
  • #觀察永澄50天-01天# 世界就是個游戲! #觀察永澄50天實驗-02天#汽車跟馬車是什么關(guān)系,不是馬車多一匹馬...
    onelin閱讀 254評論 0 0
  • 1 因為缺乏了解,大人們常常認(rèn)為孩子小,對于幼小孩子的想法或者意見極少會放在心上,總感覺他們還不懂。事情大人由決定...
    微雨芳原閱讀 291評論 0 1

友情鏈接更多精彩內(nèi)容