您好,登錄后才能下訂單哦!
這篇文章主要講解了“python爬蟲模擬登錄之圖片驗(yàn)證碼如何實(shí)現(xiàn)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“python爬蟲模擬登錄之圖片驗(yàn)證碼如何實(shí)現(xiàn)”吧!
首先,打開百度智能云進(jìn)行登入,再進(jìn)入人工智能->文字識別里創(chuàng)建應(yīng)用。
在使用名稱和底下應(yīng)用描述隨便寫寫,然后點(diǎn)立即創(chuàng)建。
創(chuàng)建完成,就可以拿到 AppID 、API Key 、Secret Key
之后要在pycharm下載baidu-aip,然后導(dǎo)入AipOcr包。
from aip import AipOcr #aip在baidu-aip中
再然后就是初始化百度API
#百度API APP_ID = '你的之前拿到的AppID' API_KEY = '你的之前拿到的API Key' Secret_Key = '你的之前拿到的Secret Key'
我們先要把 圖片驗(yàn)證碼下載下來進(jìn)行二值化處理,這樣識別的準(zhǔn)確率高一些。
這里要下載pillow庫,然后導(dǎo)入Image包
from PIL import Image #PIL在pillow庫中
#圖片處理 # 二值化處理 灰度閾值設(shè)為127,高于這個(gè)值的點(diǎn)全部填白色 img_old = Image.open('code.jpg') img_old = img_old.convert('L') # 灰度圖 模式“L” 每個(gè)像素用8個(gè)bit表示,0表示黑,255表示白 threshld = 127 #設(shè)置閾值,圖片的像素范圍(0,255) table = [] for i in range(256): if i <threshld: table.append(0) else: table.append(1) img_old = img_old.point(table,'1') # 對圖像像素操作 模式“1” 為二值圖像,非黑即白。但是它每個(gè)像素用8個(gè)bit表示,0表示黑,255表示白 img_old.save('code.jpg')
對于那些有干擾線,特別還是明暗交替的圖片驗(yàn)證碼來說,這樣很好的避免了被干擾。
這里的圖片中沒有太多干擾線且也沒有明暗交替所以看起來不明顯,只是想讓大家看看對比。
處理前
處理后
后面就是調(diào)用baidu_aip來讀取圖片中的內(nèi)容。baidu_aip.handwriting
#讀取處理后的驗(yàn)證碼 with open('code.jpg','rb') as fp: img_new = fp.read() baidu_aip = AipOcr(APP_ID,API_KEY,Secret_Key) result = baidu_aip.handwriting(img_new) #使用的是識別手寫文字,返回一個(gè)字典,其中words_result是一個(gè)列表,里面有識別結(jié)果也是一個(gè)字典 print('驗(yàn)證碼是:',result['words_result'][0]['words'])
baidu_aip.handwriting這里面有很多識別文字的方法,我用的是識別手寫文字,如果大家使用這個(gè)方法感覺效果不好可以選擇其他方法。
最后是完整的代碼。
# -- coding:UTF-8 -- import requests from PIL import Image from aip import AipOcr if __name__ == "__main__": #百度API APP_ID = '你的之前拿到的AppID' API_KEY = '你的之前拿到的API Key' Secret_Key = '你的之前拿到的Secret Key' headers = { "user-agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 97.0.4692.71Safari / 537.36Edg / 97.0.1072.55" } url = 'http://www.hyocr.com/captcha.php' #下載驗(yàn)證碼圖片 session = requests.session() img_data = session.get(url=url,headers=headers).content with open('./code.jpg','wb') as fp: fp.write(img_data) #圖片處理 # 二值化處理 灰度閾值設(shè)為127,高于這個(gè)值的點(diǎn)全部填白色 img_old = Image.open('code.jpg') img_old = img_old.convert('L') # 灰度圖 模式“L” 每個(gè)像素用8個(gè)bit表示,0表示黑,255表示白 threshld = 127 #設(shè)置閾值,圖片的像素范圍(0,255) table = [] for i in range(256): if i <threshld: table.append(0) else: table.append(1) img_old = img_old.point(table,'1') # 對圖像像素操作 模式“1” 為二值圖像,非黑即白。但是它每個(gè)像素用8個(gè)bit表示,0表示黑,255表示白 img_old.save('code.jpg') #讀取處理后的驗(yàn)證碼 with open('code.jpg','rb') as fp: img_new = fp.read() baidu_aip = AipOcr(APP_ID,API_KEY,Secret_Key) result = baidu_aip.handwriting(img_new) #使用的是識別手寫文字,返回一個(gè)字典,其中words_result是一個(gè)列表,里面有識別結(jié)果也是一個(gè)字典 print('驗(yàn)證碼是:',result['words_result'][0]['words'])
感謝各位的閱讀,以上就是“python爬蟲模擬登錄之圖片驗(yàn)證碼如何實(shí)現(xiàn)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對python爬蟲模擬登錄之圖片驗(yàn)證碼如何實(shí)現(xiàn)這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。