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

第一步安裝

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

OCR

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

例如這樣的驗證碼


image.png
image.png

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

相關鏈接

Windows下的安裝

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

image.png

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

下載完成之后雙擊安裝即可,會出現如圖:


image.png

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

pip install tesserocr pillow

Linux下的安裝

Linux下的安對于 Linux 來說,不同系統已經有了不同的發行包了,它可能叫做 tesseract-ocr 或者 tesseract,直接用對應的命令安裝即可。

Ubuntu、Debian、Deepin

安裝命令如下:

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

CentOS、RedHat

安裝命令如下:

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

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

tesseract --list-langs

運行結果示例:

List of available languages (3):
eng
osd
equ

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

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

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

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:

結果如下:

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

即可發現其列出的語言就多了非常多,比如 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 來分別進行測試。
下面我們以如下的圖片為樣例進行測試,如圖 1-26 所示:


image.png

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

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

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

運行結果:

Tesseract Open Source OCR Engine v3.05.01 with Leptonica
Python3WebSpider

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

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

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

運行結果:

Python3WebSpider

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

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

運行結果:

Python3WebSpider

如果成功輸出結果,則證明 Tesseract 和 Tesserocr 都已經安裝成功。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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