歡迎關(guān)注哈希大數(shù)據(jù)微信公眾號
引 言
最近閑來無事為了提高自己,到查試圖抓取一些企業(yè)信息,可是發(fā)現(xiàn)在抓取其企業(yè)列表頁時(shí),看到的企業(yè)名稱和實(shí)際抓到的不一樣,網(wǎng)站對其進(jìn)行了加密(今天又正常了),同樣例如貓眼電影的電影票房信息也進(jìn)行了加密處理。結(jié)合之前處理驗(yàn)證碼的經(jīng)驗(yàn)我在想能不能利用圖像識別的方法抓取這些內(nèi)容,因?yàn)橐话憔W(wǎng)頁上的內(nèi)容都很規(guī)整,據(jù)我目前的測試Tesseract對規(guī)整數(shù)字的識別率已經(jīng)達(dá)到95%以上,走通這個(gè)流程后不但可以實(shí)現(xiàn)對簡單驗(yàn)證碼的自動識別,而且爬取不同的網(wǎng)站不用去分析其加密函數(shù)了豈不快哉!本次分享是我的初步嘗試,目前用的工具為:Python+Selenium+chrome+PIL+Tesseract-OCR**。
01 THE THINKING 思路介紹
這里采用了selenium驅(qū)動瀏覽器的方法進(jìn)行數(shù)據(jù)采集,因?yàn)樾枰褜?yīng)標(biāo)簽保存為圖片進(jìn)行識別,所以只能采用模擬登陸的辦法。這里用chrome瀏覽器后面會介紹為什么不采用phantomJS,PIL是用來進(jìn)行圖片預(yù)處理的,一般首相會進(jìn)行二值化處理,進(jìn)而進(jìn)行銳化處理增強(qiáng)其對比度,這樣對于字體顏色不深的圖像識別可以提高其識別精度。這里的圖像識別采用的是Tesseract-OCR這個(gè)軟件,Tesseract的OCR引擎最先由HP實(shí)驗(yàn)室于1985年開始研發(fā),至1995年時(shí)已經(jīng)成為OCR業(yè)內(nèi)最準(zhǔn)確的三款識別引擎之一。然而,HP不久便決定放棄OCR業(yè)務(wù),Tesseract也從此塵封。數(shù)年以后,HP意識到,與其將Tesseract束之高閣,不如貢獻(xiàn)給開源軟件業(yè),讓其重?zé)ㄐ律C2005年,Tesseract由美國內(nèi)華達(dá)州信息技術(shù)研究所獲得,并求諸于Google對 Tesseract進(jìn)行改進(jìn)、消除Bug、優(yōu)化工作。
Tesseract目前已作為開源項(xiàng)目發(fā)布在Google Project,其項(xiàng)目主頁在這里(https://code.google.com/p/tesseract-ocr/)查看。
02 THE INSTALL AND CONFIGURATION【
Tesseract安裝配置
以下是Windows環(huán)境下的安裝配置過程:
第一步:下載安裝包
根據(jù)https://github.com/tesseract-ocr/tesseract/wiki,找到64位的非官方安裝包http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-4.00.00dev.exe,下載后直接安裝即可,但是要記得你的安裝目錄,我們等會配置環(huán)境變量要用。
如果不是做英文的圖文識別,還需要下載其他語言的識別包https://github.com/tesseract-ocr/tesseract/wiki/Data-Files。
簡體字識別包:https://raw.githubusercontent.com/tesseract-ocr/tessdata/4.00/chi_sim.traineddata
繁體字識別包:https://github.com/tesseract-ocr/tessdata/raw/4.0/chi_tra.traineddata
數(shù)字識別包:https://raw.githubusercontent.com/tesseract-ocr/tessdata/4.00/num.traineddata。
下好的識別包需要放到安裝目錄Tesseract-OCR下的tessdata文件夾下,如下圖所示:第二步:安裝
直接執(zhí)行下載好的tesseract-ocr-setup-4.00.00dev.exe,下一步、下一步安裝。
第三步:配置環(huán)境變量
注意:我的系統(tǒng)是win8.1,其他系統(tǒng)應(yīng)該差不多,跟配置java變量一樣
復(fù)制你的安裝地址,我的是安裝在E:\Program Files (x86)\Tesseract-OCR,界面如下:如果報(bào)錯(cuò)可能是配置問題,請仔細(xì)檢查,如不能解決請留言。安裝配置完成可以在命令行中測試tesseract是否能識別成功,具體流程如下:
先將需要識別的圖片保存到一個(gè)文件夾中,例如網(wǎng)頁上的內(nèi)容可以通過截圖將需要分別的內(nèi)容保存為圖片;
可在命令行窗口中打開存儲圖片的文件夾;
在命令行中輸入:
tesseract <圖片名稱如:1.png> <保存文件名稱如:1(此時(shí)識別出的內(nèi)容會保存在1.txt文件內(nèi))> -l <識別包名稱如:num/eng/chi_sim,若干識別的內(nèi)容中存在數(shù)字和英文可以用:num+eng,其他情況與此相似>,舉例如下:
解析的圖片與識別結(jié)果如下圖所示:
&
通過這個(gè)案例我們發(fā)現(xiàn)我們能準(zhǔn)確識別其內(nèi)容??!