在爬蟲過程中,難免會遇到各種各樣的驗證碼,而大多數驗證碼還是圖形驗證碼,這時候我們可以直接用OCR來識別。
1. OCR
OCR,即Optical Character Recognition,光學字符識別,是指通過掃描字符,然後通過其形狀將其翻譯成電子文本的過程。對於圖形驗證碼來說,它們都是一些不規則的字符,這些字符確實是由字符稍加扭曲變換得到的內容。
例如,對於如圖1-22和圖1-23所示的驗證碼,我們可以使用OCR技術來將其轉化爲電子文本,然後爬蟲將識別結果提交給服務器,便可以達到自動識別驗證碼的過程。
圖1-22 驗證碼
圖1-23 驗證碼
tesserocr是Python的一個OCR識別庫,但其實是對tesseract做的一層Python API封裝,所以它的核心是tesseract。因此,在安裝tesserocr之前,我們需要先安裝tesseract。
2. 相關鏈接
-
tesserocr GitHub:https://github.com/sirfz/tesserocr
-
tesserocr PyPI:https://pypi.python.org/pypi/tesserocr
-
tesseract下載地址:http://digi.bib.uni-mannheim.de/tesseract
-
tesseract GitHub:https://github.com/tesseract-ocr/tesseract
-
tesseract語言包:https://github.com/tesseract-ocr/tessdata
-
tesseract文檔:https://github.com/tesseract-ocr/tesseract/wiki/Documentation
3. Windows下的安裝
在Windows下,首先需要下載tesseract,它爲tesserocr提供了支持。
進入下載頁面,可以看到有各種.exe文件的下載列表,這裏可以選擇下載3.0版本。圖1-24所示爲3.05版本。
圖1-24 下載頁面
其中文件名中帶有dev的爲開發版本,不帶dev的爲穩定版本,可以選擇下載不帶dev的版本,例如可以選擇下載tesseract-ocr-setup-3.05.01.exe。
下載完成後雙擊,此時會出現如圖1-25所示的頁面。
圖1-25 安裝頁面
此時可以勾選Additional language data(download)選項來安裝OCR識別支持的語言包,這樣OCR便可以識別多國語言。然後一路點擊Next按鈕即可。
接下來,再安裝tesserocr即可,此時直接使用pip安裝:
pip3 install tesserocr pillow
4. Linux下的安裝
對於Linux來說,不同系統已經有了不同的發行包了,它可能叫作tesseract-ocr或者tesseract,直接用對應的命令安裝即可。
Ubuntu、Debian和Deepin
在Ubuntu、Debian和Deepin系統下,安裝命令如下:
sudo apt-get install -y tesseract-ocr libtesseract-dev libleptonica-dev
CentOS、Red Hat
在CentOS和Red Hat系統下,安裝命令如下:
yum install -y tesseract
在不同發行版本運行如上命令,即可完成tesseract的安裝。
安裝完成後,便可以調用tesseract
命令了。
接着,我們查看一下其支持的語言:
1 tesseract --list-langs
運行結果示例:
List of available languages (3): eng osd equ
結果顯示它只支持幾種語言,如果想要安裝多國語言,還需要安裝語言包,官方叫作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和Red Hat系統下的遷移命令如下:
git clone https://github.com/tesseract-ocr/tessdata.git sudo mv tessdata/* /usr/share/tesseract/tessdata
這樣就可以將下載下來的語言包全部安裝了。
這時我們重新運行列出所有語言的命令:
tesseract --list-langs
結果如下:
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安裝:
pip3 install tesserocr pillow
5. Mac下的安裝
在Mac下,我們首先使用Homebrew安裝ImageMagick和tesseract庫:
brew install imagemagick brew install tesseract --all-languages
接下來再安裝tesserocr即可:
pip3 install tesserocr pillow
這樣我們便完成了tesserocr的安裝。
6. 驗證安裝
接下來,我們可以使用tesseract和tesserocr來分別進行測試。
下面我們以如圖1-26所示的圖片爲樣例進行測試。
圖1-26 測試樣例
該圖片的鏈接爲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都已經安裝成功。