python爬蟲模擬登錄之圖片驗證碼實現(xiàn)詳解
我們在用爬蟲對門戶網(wǎng)站進行模擬登錄是總會有輸入圖片驗證碼的,例如這種
那我們怎么解決這個問題實現(xiàn)全自動的模擬登錄呢?只要思想不滑坡,辦法總比困難多。我這里使用的是百度智能云里面的文字識別功能,每天好像可以免費使用個幾百次,識別效果也還行,對一般人而言是夠用了。
接下來說說,怎么使用。
首先,打開百度智能云(https://cloud.baidu.com/)進行登入,再進入人工智能->文字識別里創(chuàng)建應用。
在使用名稱和底下應用描述隨便寫寫,然后點立即創(chuàng)建。
創(chuàng)建完成,就可以拿到 AppID 、API Key 、Secret Key
之后要在pycharm下載baidu-aip,然后導入AipOcr包。
from aip import AipOcr? ? ? ?#aip在baidu-aip中
再然后就是初始化百度API
#百度API APP_ID = '你的之前拿到的AppID' API_KEY = '你的之前拿到的API Key' Secret_Key = '你的之前拿到的Secret Key'
我們先要把 圖片驗證碼下載下來進行二值化處理,這樣識別的準確率高一些。
這里要下載pillow庫,然后導入Image包
from PIL import Image #PIL在pillow庫中
#圖片處理 # 二值化處理 灰度閾值設為127,高于這個值的點全部填白色 img_old = Image.open('code.jpg') img_old = img_old.convert('L') # 灰度圖 模式“L” 每個像素用8個bit表示,0表示黑,255表示白 threshld = 127 #設置閾值,圖片的像素范圍(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” 為二值圖像,非黑即白。但是它每個像素用8個bit表示,0表示黑,255表示白 img_old.save('code.jpg')
對于那些有干擾線,特別還是明暗交替的圖片驗證碼來說,這樣很好的避免了被干擾。
這里的圖片中沒有太多干擾線且也沒有明暗交替所以看起來不明顯,只是想讓大家看看對比。
處理前 處理后
后面就是調(diào)用baidu_aip來讀取圖片中的內(nèi)容。baidu_aip.handwriting
#讀取處理后的驗證碼 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) #使用的是識別手寫文字,返回一個字典,其中words_result是一個列表,里面有識別結果也是一個字典 print('驗證碼是:',result['words_result'][0]['words'])
baidu_aip.handwriting這里面有很多識別文字的方法,我用的是識別手寫文字,如果大家使用這個方法感覺效果不好可以選擇其他方法。
最后是完整的代碼。
# -- 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' #下載驗證碼圖片 session = requests.session() img_data = session.get(url=url,headers=headers).content with open('./code.jpg','wb') as fp: fp.write(img_data) #圖片處理 # 二值化處理 灰度閾值設為127,高于這個值的點全部填白色 img_old = Image.open('code.jpg') img_old = img_old.convert('L') # 灰度圖 模式“L” 每個像素用8個bit表示,0表示黑,255表示白 threshld = 127 #設置閾值,圖片的像素范圍(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” 為二值圖像,非黑即白。但是它每個像素用8個bit表示,0表示黑,255表示白 img_old.save('code.jpg') #讀取處理后的驗證碼 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) #使用的是識別手寫文字,返回一個字典,其中words_result是一個列表,里面有識別結果也是一個字典 print('驗證碼是:',result['words_result'][0]['words'])
這只是百度智能云里面的一個小功能,還有很多其他的功能,大家感興趣可以去看看百度智能云里面的官方文檔 ,還有視頻教程。
總結
到此這篇關于python爬蟲模擬登錄之圖片驗證碼實現(xiàn)的文章就介紹到這了,更多相關python爬蟲圖片驗證碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Django websocket原理及功能實現(xiàn)代碼
這篇文章主要介紹了Django websocket原理及功能實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-11-11在win64上使用bypy進行百度網(wǎng)盤文件上傳功能
這篇文章主要介紹了在win64上使用bypy進行百度網(wǎng)盤文件上傳功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01python圖形界面開發(fā)之wxPython樹控件使用方法詳解
這篇文章主要介紹了python圖形界面開發(fā)之wxPython樹控件使用方法詳解,需要的朋友可以參考下2020-02-02Python使用面向?qū)ο蠓绞絼?chuàng)建線程實現(xiàn)12306售票系統(tǒng)
目前python 提供了幾種多線程實現(xiàn)方式 thread,threading,multithreading ,其中thread模塊比較底層,而threading模塊是對thread做了一些包裝,可以更加方便的被使用2015-12-12詳解使用python繪制混淆矩陣(confusion_matrix)
這篇文章主要介紹了詳解使用python繪制混淆矩陣(confusion_matrix),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07