生活随笔
收集整理的這篇文章主要介紹了
大写牛逼,用 Python 登录主流 24 个网站
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
爬蟲腳本是大家經(jīng)常用到的,那就避開不了登錄?這一關(guān)。
使用Python一般需要request庫(kù),補(bǔ)充 header 中的 post 要素,有些還會(huì)有 隱藏的 hidden 參數(shù),可以通過瀏覽器 F12 或者元素審查來發(fā)現(xiàn),對(duì)于初學(xué)者來說都是一個(gè)坑。
還有需要解決驗(yàn)證碼的問題,一種方法是下載驗(yàn)證碼圖片識(shí)別驗(yàn)證碼再次post,或者使用云打碼平臺(tái)。當(dāng)然,有些驗(yàn)證碼及其變態(tài)就不那么容易解決了,比如選字順序、滑塊、12306那種人為都會(huì)選錯(cuò)的。
本篇boy哥分享一個(gè)GitHub項(xiàng)目《awesome-python-login-model》,主要就是利用Python解決登錄主流平臺(tái)的,包含24個(gè)主流平臺(tái),目前在GitHub上已經(jīng)表星11.8k了。
Github鏈接:https://github.com/Kr1s77/awesome-python-login-model
▍已完成的主流網(wǎng)站
上面是作者已經(jīng)完成的一些主流網(wǎng)站了,其中有的是通過?selenium登錄,有的是通過?抓包直接模擬登錄,有的是利用 scrapy框架。
這個(gè)很容易理解,因?yàn)橛械木W(wǎng)站設(shè)計(jì)比較復(fù)雜,通過抓包很難實(shí)現(xiàn)模擬登錄,這樣用 selenium+webdriver 就會(huì)相對(duì)輕松一些。
雖然在登錄的時(shí)候采用的是selenium,為了效率,我們可以在登錄過后得到的cookie維護(hù)起來,然后調(diào)用requests或者scrapy等進(jìn)行數(shù)據(jù)采集,這樣數(shù)據(jù)采集的速度可以得到保證。
▍模擬登錄GitHub
這里boy哥給大家展示一個(gè)模擬登錄GitHub的代碼。
"""
github第二種登錄方式
info:
author:CriseLYJ
github:https://github.com/CriseLYJ/
update_time:2019-3-7
"""import?re
import?requests
from?lxml?import?etreeclass?Login(object):
class?GithubLogin(object):def?__init__(self,?email,?password):#?初始化信息self.headers?=?{'User-Agent':?'Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_14_2)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/71.0.3578.98?Safari/537.36','Referer':?'https://github.com/','Host':?'github.com'}self.session?=?requests.Session()self.login_url?=?'https://github.com/login'self.post_url?=?'https://github.com/session'self.session?=?requests.Session()self.email?=?emailself.password?=?password
????#?模擬登錄def?login_GitHub(self):#?登錄入口post_data?=?{'commit':?'Sign?in','utf8':?'?','authenticity_token':?self.get_token(),'login':?self.email,'password':?self.password}resp?=?self.session.post(self.post_url,?data=post_data,?headers=self.headers)print('StatusCode:',?resp.status_code)if?resp.status_code?!=?200:print('Login?Fail')match?=?re.search(r'"user-login"?content="(.*?)"',?resp.text)user_name?=?match.group(1)print('UserName:',?user_name)response?=?self.session.post(self.post_url,?data=post_data,?headers=self.headers)print(response.status_code)print(post_data)if?response.status_code?==?200:print("登錄成功!")else:print("登錄失敗!")
????#?獲取token信息#?Get?login?tokendef?get_token(self):response?=?self.session.get(self.login_url,?headers=self.headers)html?=?etree.HTML(response.content.decode())token?=?html.xpath('//input[@name="authenticity_token"]/@value')[0]return?tokenif?response.status_code?!=?200:print('Get?token?fail')return?Nonematch?=?re.search(r'name="authenticity_token"?value="(.*?)"',?response.text)if?not?match:print('Get?Token?Fail')return?Nonereturn?match.group(1)if?__name__?==?'__main__':email?=?input('請(qǐng)輸入您的賬號(hào):?')password?=?input('請(qǐng)輸入您的密碼:?')email?=?input('Account:')password?=?input('Password:')login?=?Login(email,?password)login?=?GithubLogin(email,?password)login.login_GitHub()
相信這對(duì)初學(xué)爬蟲的朋友是一個(gè)很好的教程。
但提示一下,模擬登錄的代碼隨時(shí)都有可能失效,因?yàn)榍岸说木W(wǎng)頁(yè)HTML、CSS、JS等結(jié)構(gòu)可能會(huì)根據(jù)公司業(yè)務(wù)調(diào)整之類的發(fā)生變化。
所以,重點(diǎn)是掌握了各種技巧,學(xué)會(huì)這些完全可以自己調(diào)試完成登錄,那時(shí)候你也可以成為 contributor 了!
Github鏈接:https://github.com/Kr1s77/awesome-python-login-model
公眾號(hào)文末改版了,如果覺得有幫助,還請(qǐng)多多支持,歡迎?分享、點(diǎn)贊、在看?三連。
為了回饋廣大讀者朋友,我特地免費(fèi)送給大家三份大禮1. Pandas 官方教程中文版。?
2. 300G 硬核 Python 視頻,涵蓋你所有想看。??
3. 一個(gè)月精通 Python 的秘籍。
下面是部分視頻的截圖資料獲取方法
長(zhǎng)按掃描下方二維碼關(guān)注
在后臺(tái)回復(fù)關(guān)鍵詞:資料掃描關(guān)注,回復(fù)"資料"免費(fèi)領(lǐng)取
總結(jié)
以上是生活随笔為你收集整理的大写牛逼,用 Python 登录主流 24 个网站的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。