python程序18:聊一聊驗(yàn)證碼,寫(xiě)一個(gè)識(shí)別程序
寫(xiě)爬蟲(chóng)有一個(gè)繞不過(guò)去的問(wèn)題,那就是驗(yàn)證碼。
先來(lái)看看,目前遇到的驗(yàn)證碼種類(lèi)有哪些?
1)圖形驗(yàn)證碼
圖形驗(yàn)證碼應(yīng)該是最簡(jiǎn)單的一種驗(yàn)證碼,這種驗(yàn)證碼是最早出現(xiàn),也是目前最常見(jiàn)的,一般組成規(guī)則是字母,數(shù)字或混合組成;
2)滑動(dòng)驗(yàn)證碼
想必大家都見(jiàn)過(guò),滑動(dòng)滑塊匹配對(duì)應(yīng)形狀解鎖。
3)點(diǎn)觸驗(yàn)證碼
按圖片所給提示從中選出指定元素,目前是最主流也是防止bot最有效的方式了。
OCR,全稱叫 Optical Character Recognition,中文翻譯叫光學(xué)字符識(shí)別,是指通過(guò)掃描字符,通過(guò)其形狀將其翻譯成電子文本的過(guò)程;
舉例:
當(dāng)有一個(gè)圖形驗(yàn)證碼,先使用OCR技術(shù)將其轉(zhuǎn)化成電子文本,然后爬蟲(chóng)將識(shí)別的結(jié)果提交到服務(wù)器,便達(dá)到自動(dòng)識(shí)別驗(yàn)證碼的過(guò)程;
tesseract
tesseract是google開(kāi)源的OCR
識(shí)別圖形驗(yàn)證碼需要安裝tesserocr這個(gè)庫(kù),下面介紹下tesserocr;
tesserocr是Python的一個(gè)OCR識(shí)別庫(kù),但其實(shí)是對(duì)tesseract做了一層Python Api的封裝,
核心還是tesseract,所以在安裝tesserocr之前,需要先安裝tesseract。
windows下的安裝
在Windows下,要先下載tesseract,它為tesserocr提供了支持;
tesseract下載地址:Index of /tesseract
打開(kāi)后,可以看到各種exe的列表,可以隨便挑選;
其中文件名中帶有dev的為開(kāi)發(fā)版本,不帶dev則為穩(wěn)定版本,例如jb是下載 tesseract-ocr-setup-3.05.01.exe;
下載后雙擊,一路點(diǎn)擊,直到出現(xiàn)下面這個(gè)頁(yè)面

這里需要勾選紅框里的Additional language data(download),這個(gè)選項(xiàng)是安裝OCR識(shí)別支持的語(yǔ)言包,這樣OCR就可以識(shí)別多國(guó)語(yǔ)言,然后再一路點(diǎn)擊NEXT即可,因?yàn)橐螺d語(yǔ)言包,所以需要點(diǎn)時(shí)間,大概10-20分鐘左右,跟網(wǎng)速有關(guān),如果不需要支持多國(guó)語(yǔ)言的話,也可以不勾選,自由選擇
需要說(shuō)明:默認(rèn)包含英文字庫(kù)
如果,覺(jué)得一次下載那么多語(yǔ)言占空間,又或者覺(jué)得網(wǎng)速慢,也可以選擇單獨(dú)安裝中文字庫(kù);
字庫(kù)下載地址:https://github.com/tesseract-ocr/tessdata
打開(kāi)后,直接搜索chi_sim.traineddata,這個(gè)代表的就是中文,下載下來(lái);
然后找到剛剛tesseract安裝目錄,里面會(huì)有一個(gè)叫tessdata的目錄,直接把剛下載的語(yǔ)言包放到這個(gè)目錄下即可;
如何驗(yàn)證tesseract是否安裝成功?直接cmd下輸入tesseract即可;
成功會(huì)直接顯示信息;

如果提示’tesseract’ 不是內(nèi)部或外部命令,則是因?yàn)闆](méi)有配置環(huán)境變量,手動(dòng)把tesseract根目錄配置到path參數(shù)下即可,之前python教程有說(shuō)到,參考即可;
到此為止,tesseract安裝成功啦。
接下來(lái)就安裝tesserocr,直接pip命令即可:
pip install tesserocr
如果是anaconda環(huán)境下需要通過(guò)下面這個(gè):conda install -c simonflueckiger tesserocr
?下載模塊
為了方便測(cè)試,需要把驗(yàn)證碼的圖片保存到本地;
打開(kāi)weibo.com,隨便輸入賬號(hào)密碼,會(huì)提示輸入驗(yàn)證碼,打開(kāi)開(kāi)發(fā)者工具(一般快捷鍵F12),找到驗(yàn)證碼元素,它的src屬性就是一個(gè)鏈接,copy出來(lái)直接打開(kāi),會(huì)看到一個(gè)驗(yàn)證碼,而且刷新的驗(yàn)證碼會(huì)變化,由此推斷這是個(gè)驗(yàn)證碼的接口,右鍵保存驗(yàn)證碼即可,就得到一張驗(yàn)證碼;
驗(yàn)證碼鏈接:https://login.sina.com.cn/cgi/pin.php?r=9967937&s=0&p=gz-d0dc363f6a4523cbd602a5a10f00c59b4784
將這個(gè)驗(yàn)證碼下載放到根目錄下,用tesserocr庫(kù)來(lái)識(shí)別驗(yàn)證碼:
import tesserocr
from PIL import Image?
#新建Image對(duì)象?
image = Image.open("zym.jpg")?
#調(diào)用tesserocr的image_to_text()方法,傳入image對(duì)象完成識(shí)別?
result = tesserocr.image_to_text(image)
print(result)
測(cè)試發(fā)現(xiàn)能夠通過(guò)tesserocr圖片識(shí)別得到對(duì)應(yīng)的文字,感興趣的同學(xué)可以嘗試一下。