在爬蟲過程中惑艇,難免會(huì)遇到各種各樣的驗(yàn)證碼心剥,而大多數(shù)驗(yàn)證碼還是圖形驗(yàn)證碼自阱,這時(shí)候我們可以直接用OCR來識(shí)別管毙。
1. OCR
OCR腿椎,即Optical Character Recognition,光學(xué)字符識(shí)別夭咬,是指通過掃描字符啃炸,然后通過其形狀將其翻譯成電子文本的過程。對(duì)于圖形驗(yàn)證碼來說卓舵,它們都是一些不規(guī)則的字符南用,這些字符確實(shí)是由字符稍加扭曲變換得到的內(nèi)容。
例如,對(duì)于如圖1-22和圖1-23所示的驗(yàn)證碼训枢,我們可以使用OCR技術(shù)來將其轉(zhuǎn)化為電子文本,然后爬蟲將識(shí)別結(jié)果提交給服務(wù)器忘巧,便可以達(dá)到自動(dòng)識(shí)別驗(yàn)證碼的過程恒界。
圖1-22 驗(yàn)證碼
圖1-23 驗(yàn)證碼
tesserocr是Python的一個(gè)OCR識(shí)別庫(kù),但其實(shí)是對(duì)tesseract做的一層Python API封裝砚嘴,所以它的核心是tesseract十酣。因此,在安裝tesserocr之前际长,我們需要先安裝tesseract耸采。
2. 相關(guān)鏈接
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提供了支持虾宇。
進(jìn)入下載頁面,可以看到有各種.exe文件的下載列表如绸,這里可以選擇下載3.0版本嘱朽。圖1-24所示為3.05版本。
圖1-24 下載頁面
其中文件名中帶有dev的為開發(fā)版本怔接,不帶dev的為穩(wěn)定版本搪泳,可以選擇下載不帶dev的版本,例如可以選擇下載tesseract-ocr-setup-3.05.01.exe扼脐。
下載完成后雙擊岸军,此時(shí)會(huì)出現(xiàn)如圖1-25所示的頁面。
圖1-25 安裝頁面
此時(shí)可以勾選Additional language data(download)選項(xiàng)來安裝OCR識(shí)別支持的語言包瓦侮,這樣OCR便可以識(shí)別多國(guó)語言强霎。然后一路點(diǎn)擊Next按鈕即可。
接下來呕诉,再安裝tesserocr即可欲险,此時(shí)直接使用pip安裝:
pip3 install tesserocr pillow
4. Linux下的安裝
對(duì)于Linux來說,不同系統(tǒng)已經(jīng)有了不同的發(fā)行包了须喂,它可能叫作tesseract-ocr或者tesseract吁断,直接用對(duì)應(yīng)的命令安裝即可。
Ubuntu坞生、Debian和Deepin
在Ubuntu仔役、Debian和Deepin系統(tǒng)下,安裝命令如下:
sudo apt-get install -y tesseract-ocr libtesseract-dev libleptonica-dev
CentOS是己、Red Hat
在CentOS和Red Hat系統(tǒng)下又兵,安裝命令如下:
yum install -y tesseract
在不同發(fā)行版本運(yùn)行如上命令,即可完成tesseract的安裝。
安裝完成后沛厨,便可以調(diào)用tesseract命令了宙地。
接著,我們查看一下其支持的語言:
tesseract --list-langs
運(yùn)行結(jié)果示例:
List of available languages (3):engosdequ
結(jié)果顯示它只支持幾種語言逆皮,如果想要安裝多國(guó)語言宅粥,還需要安裝語言包,官方叫作tessdata(其下載鏈接為:https://github.com/tesseract-ocr/tessdata)电谣。
利用Git命令將其下載下來并遷移到相關(guān)目錄即可秽梅,不同版本的遷移命令如下所示。
在Ubuntu剿牺、Debian和Deepin系統(tǒng)下的遷移命令如下:
git clone https://github.com/tesseract-ocr/tessdata.gitsudo mv tessdata/* /usr/share/tesseract-ocr/tessdata
在CentOS和Red Hat系統(tǒng)下的遷移命令如下:
git clone https://github.com/tesseract-ocr/tessdata.gitsudo mv tessdata/* /usr/share/tesseract/tessdata
這樣就可以將下載下來的語言包全部安裝了企垦。
這時(shí)我們重新運(yùn)行列出所有語言的命令:
tesseract --list-langs
結(jié)果如下:
List of available languages (107):aframharaasmazeaze_cyrlbelbenbodbosbulcatcebceschi_simchi_tra...
可以發(fā)現(xiàn),這里列出的語言就多了很多晒来,比如chi_sim就代表簡(jiǎn)體中文钞诡,這就證明語言包安裝成功了。
接下來再安裝tesserocr即可湃崩,這里直接使用pip安裝:
pip3 install tesserocr pillow
5. Mac下的安裝
在Mac下臭增,我們首先使用Homebrew安裝ImageMagick和tesseract庫(kù):
brew install imagemagick brew install tesseract --all-languages
接下來再安裝tesserocr即可:
pip3 install tesserocr pillow
這樣我們便完成了tesserocr的安裝。
6. 驗(yàn)證安裝
接下來竹习,我們可以使用tesseract和tesserocr來分別進(jìn)行測(cè)試誊抛。
下面我們以如圖1-26所示的圖片為樣例進(jìn)行測(cè)試。
圖1-26 測(cè)試樣例
該圖片的鏈接為https://raw.githubusercontent.com/Python3WebSpider/TestTess/master/image.png整陌,可以直接保存或下載拗窃。
首先用命令行進(jìn)行測(cè)試,將圖片下載下來并保存為image.png泌辫,然后用tesseract命令測(cè)試:
tesseract image.png result -l eng && cat result.txt
運(yùn)行結(jié)果如下:
Tesseract Open Source OCR Engine v3.05.01 with LeptonicaPython3WebSpider
這里我們調(diào)用了tesseract命令随夸,其中第一個(gè)參數(shù)為圖片名稱,第二個(gè)參數(shù)result為結(jié)果保存的目標(biāo)文件名稱震放,-l指定使用的語言包宾毒,在此使用英文(eng)。然后殿遂,再用cat命令將結(jié)果輸出诈铛。
運(yùn)行結(jié)果便是圖片的識(shí)別結(jié)果:Python3WebSpider∧福可以看到幢竹,這時(shí)已經(jīng)成功將圖片文字轉(zhuǎn)為電子文本了。
然后還可以利用Python代碼來測(cè)試恩静,這里就需要借助于tesserocr庫(kù)了焕毫,測(cè)試代碼如下:
import tesserocrfrom PIL import Imageimage = Image.open('image.png')print(tesserocr.image_to_text(image))
我們首先利用Image讀取了圖片文件蹲坷,然后調(diào)用了tesserocr的image_to_text()方法,再將其識(shí)別結(jié)果輸出邑飒。
運(yùn)行結(jié)果如下:
Python3WebSpider
另外循签,我們還可以直接調(diào)用file_to_text()方法,這可以達(dá)到同樣的效果:
import tesserocrprint(tesserocr.file_to_text('image.png'))
運(yùn)行結(jié)果:
Python3WebSpider
如果成功輸出結(jié)果疙咸,則證明tesseract和tesserocr都已經(jīng)安裝成功懦底。