Python爬蟲實(shí)現(xiàn)驗(yàn)證碼登錄代碼實(shí)例
很多網(wǎng)站為了避免被惡意訪問,需要設(shè)置驗(yàn)證碼登錄,避免非人類的訪問,Python爬蟲實(shí)現(xiàn)驗(yàn)證碼登錄的原理則是先到登錄頁面將生成的驗(yàn)證碼保存下來,然后人為輸入后,包裝后再POST給服務(wù)器,實(shí)現(xiàn)驗(yàn)證,這里還涉及到了Cookie,其實(shí)Cookie保存在本地主機(jī)上,避免用戶重復(fù)輸入用戶名和密碼,在連接服務(wù)器的時(shí)候?qū)⒃L問連接和Cookie組裝起來POST給服務(wù)器。
這里涉及到了兩次向服務(wù)器POST,一次是Cookie,這里還自行設(shè)計(jì)想要Cookie的內(nèi)容,由于是要登錄,Cookie中存放的則是用戶名和密碼。第二次POST則是向服務(wù)器提交驗(yàn)證。
這里用到Python3,主要用到的包是re urllib.request http.cookiejar
上代碼,借鑒了別人的代碼~~~
import re
import urllib.request
import http.cookiejar
#from http.comkie import CookieJar 上面那句和這句等同
loginurl='https://www.douban.com/accounts/login'
cookie = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor)#在已存的Cookie下建立連接
params={}
params['form_email']='用戶名'
params['form_password']='密碼'#這里寫上已有的用戶名和密碼
params['source']='http://www.douban.com/accounts/login'
#從首頁提交登陸
response = opener.open(loginurl,urllib.parse.urlencode(params).encode('utf-8'))#urllib.parse.urlencode(params).encode('utf-8')這個(gè)是向服務(wù)
#器POST的內(nèi)容,可以打印一下response.geturl()請求的連接看一下
#print(response.geturl()[0:33])
#驗(yàn)證成功跳轉(zhuǎn)至登陸頁
if response.geturl()[0:33]=='https://accounts.douban.com/login':
html = response.read().decode('utf-8')
#print(html),可以先打印一下文件內(nèi)容,為了看到網(wǎng)頁元素更方便的寫正則,可以復(fù)制下來,在需要獲取的地方用(.+?)表示,然后用group()元組來取得,
#驗(yàn)證圖片地址
imgurl=re.search('<img id="captcha_image" src="(.+?)" alt="captcha" class="captcha_image"/>',html)
if imgurl:
url=imgurl.group(1)
#print(url)
#將驗(yàn)證碼以v.jpg保存在本地,在輸入驗(yàn)證碼的時(shí)候可以手工輸入
res=urllib.request.urlretrieve(url,'v.jpg')
captcha = re.search('<input type="hidden" name="captcha-id" value="(.+?)"/>',html)
#print(captcha.group(1))
if captcha:
vcode=input('請輸入圖片上的驗(yàn)證碼:')
params["captcha-solution"] = vcode
params["captcha-id"] = captcha.group(1)#這個(gè)是動態(tài)生成的,需要從網(wǎng)頁中獲得
params["user_login"] = "登錄"
#提交驗(yàn)證碼驗(yàn)證
response = opener.open(loginurl,urllib.parse.urlencode(params).encode('utf-8'))
if response.geturl()=="https://www.douban.com/":
print("login sucess")
以上所述是小編給大家介紹的Python爬蟲實(shí)現(xiàn)驗(yàn)證碼登錄詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- 用Python爬蟲破解滑動驗(yàn)證碼的案例解析
- python網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼的方法
- Python爬蟲爬取ts碎片視頻+驗(yàn)證碼登錄功能
- python爬蟲如何解決圖片驗(yàn)證碼
- Python爬蟲模擬登陸嗶哩嗶哩(bilibili)并突破點(diǎn)選驗(yàn)證碼功能
- Python3爬蟲里關(guān)于識別微博宮格驗(yàn)證碼的知識點(diǎn)詳解
- Python3爬蟲關(guān)于識別點(diǎn)觸點(diǎn)選驗(yàn)證碼的實(shí)例講解
- Python3爬蟲關(guān)于識別檢驗(yàn)滑動驗(yàn)證碼的實(shí)例
- Python3爬蟲中識別圖形驗(yàn)證碼的實(shí)例講解
- Python3網(wǎng)絡(luò)爬蟲開發(fā)實(shí)戰(zhàn)之極驗(yàn)滑動驗(yàn)證碼的識別
- python爬蟲解決驗(yàn)證碼的思路及示例
- python爬蟲之驗(yàn)證碼篇3-滑動驗(yàn)證碼識別技術(shù)
- python爬蟲之自動登錄與驗(yàn)證碼識別
- Python爬蟲爬驗(yàn)證碼實(shí)現(xiàn)功能詳解
- Python爬蟲模擬登錄帶驗(yàn)證碼網(wǎng)站
- 爬蟲Python驗(yàn)證碼識別入門
相關(guān)文章
用python的turtle模塊實(shí)現(xiàn)給女票畫個(gè)小心心
今天小編就為大家分享一篇用python的turtle模塊實(shí)現(xiàn)給女票畫個(gè)小心心,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
基于Python+tkinter實(shí)現(xiàn)簡易計(jì)算器桌面軟件
tkinter是Python的標(biāo)準(zhǔn)GUI庫,對于初學(xué)者來說,它非常友好,因?yàn)樗峁┝舜罅康念A(yù)制部件,本文小編就來帶大家詳細(xì)一下如何利用tkinter制作一個(gè)簡易計(jì)算器吧2023-09-09
python實(shí)現(xiàn)的發(fā)郵件功能示例
這篇文章主要介紹了python實(shí)現(xiàn)的發(fā)郵件功能,結(jié)合實(shí)例形式分析了Python使用網(wǎng)易郵箱發(fā)送郵件的相關(guān)操作技巧,需要的朋友可以參考下2019-09-09
opencv實(shí)現(xiàn)靜態(tài)手勢識別 opencv實(shí)現(xiàn)剪刀石頭布游戲
這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)靜態(tài)手勢識別,opencv實(shí)現(xiàn)剪刀石頭布游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
driver = webdriver.Chrome()報(bào)錯(cuò)問題及解決
這篇文章主要介紹了driver = webdriver.Chrome()報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02

