https://blog.csdn.net/weixin_43521592/article/details/106890179
5.3 Tesseract圖形驗證碼識別
相信大家平時在登錄或者請求一些數據的時候經常會遇到圖形驗證碼,而我們爬蟲有時候就因為圖形驗證碼而手足無措,這一章通過學習Tesseract 來解決這個問題,使你的爬蟲之路更加的暢通無阻。
Tesseract是一個目前最優(yōu)秀最準確的開源ORC庫,目前有谷歌贊助,可以經過訓練識別任何字體。
ORC 即Optical Character Recognition,光學字符識別,是指通過掃描字符,然后通過其形狀將其翻譯成電子文本的過程。
Tesseract 下載安裝:
第一步:下載Tesseract并安裝
windows系統(tǒng)下載地址:后臺回復“20200715”獲取下載鏈接
安裝過程中需要勾選一下下圖的操作,其他一直next即可
第二步:配置環(huán)境變量
第三步:打開cmd,輸入 tesseract -v ,如果則輸入類似于下圖信息。
至此tesseract 就安裝好了。
終端操作tesseract
在此路徑下識別圖片:tesseract 圖片名稱 識別后文本的名稱
可以看出,tesseract識別這種白底黑字數字的能力還是蠻高的。
Python中使用Tesseract
使用前需要安裝pip install pytesseract
另外,讀取圖片時需要借用一個第三方庫PIL ,可通過pip安裝pip install PIL 。
import pytesseract
from PIL import Image
# 打開圖片
image = Image.open(r'D:jetbrainstest.png')
# 將圖片轉為文字
text = pytesseract.image_to_string(image)
# 輸出文字
print(text)
自動識別圖形驗證碼方式
獲取到驗證碼的url之后,你復制到瀏覽器中打開,你會發(fā)現每次刷新頁面圖形都會改變,那這就是圖形驗證碼的url了,我們可以把它下載到本地,然后利用Image打開,接著用tesseract來識別。
但現在的反爬蟲機制越來越強了,圖形驗證碼是越來越復雜,這時tesseract就顯得吃力了,而如何我們可以對其進行訓練的話那么它依舊會很強大,但是訓練的過程比較難且復雜,所以我們可以借助專門搞這行的第三方平臺來幫助我們。
我們只需要按照第三方平臺規(guī)定的格式來發(fā)送圖片url及一些參數,就可以很大幾率的識別出驗證碼。
這次案例我們選擇阿里云上的圖形驗證碼識別服務,阿里云有給每個用戶免費使用識別圖形的機會,所以對于平時偶爾爬爬蟲的小伙伴來說是個不錯的選擇。
下面來看代碼如何獲取:
import requests
# 圖形驗證碼的url
yzm_url = '"http://icode.renren.com/getcode.do?t=web_login&rnd=0.48174523967288096"'
#IMAGE_TYPE 為 1代表圖像內容為圖像文件URL鏈接 0代表圖像內容為BASE64編碼;
bodys = {"IMAGE": yam_url,
"IMAGE_TYPE": "1"}
# 固定格式
recognize_url = 'http://codevirify.market.alicloudapi.com/icredit_ai_image/verify_code/v1'
# 購買成功后可以在訂單那里查看Appcode
headers = {
"Content-Type":"application/x-www-form-urlencoded; charset=utf-8",
"Authorization":"APPCODE 5222ba0966de4f4ebb0ac0a5b3f8064a"}
# 傳參
response = requests.post(recognize_url,data=bodys,headers=headers)
print(response.json())
結果為:
{
‘VERIFY_CODE_STATUS’: ‘艾科瑞特,讓企業(yè)業(yè)績長青’,
’ VERIFY_CODE_ENTITY’: {‘VERIFY_CODE’: ‘WFKPT’}
}
其中 VERIFY_CODE里面加粗的內容就是我們所需要的驗證碼的內容。
所以,一般你要改的就是yzm_url,IMAGE_TYPE 、Authorization的APPCODE 。具體可以查看該商品的API接口:智能圖像分析-通用驗證碼識別-艾科瑞特