GitHub登錄 分析登錄頁面 開發者工具分析請求 從session請求分析得知: 1.請求的URL為:https://github.com/session 2.該請求為post請求,即需要上傳data表單,所以我們需要分析form-data 由form-data分析得知: 1.login:GitH ...
GitHub登錄
分析登錄頁面
開發者工具分析請求
從session請求分析得知:
1.請求的URL為:https://github.com/session
2.該請求為post請求,即需要上傳data表單,所以我們需要分析form-data
由form-data分析得知:
1.login:GitHub的賬號
2.password:GitHub的密碼
3.authenticity_token:每次請求時都發生變動
4.其餘參數沒有特殊的變動
因此需要分析authenticity_token的規律,經過分析源代碼得知:
在login頁面中存在該參數,且每次請求該頁面時該參數都發生變動
因此我們需要使用維持會話的方式抓取該參數
import requests session = requests.Session() #實例化,維持會話 url_login = 'https://github.com/login' response = session.get(url_login) #通過正則獲取token值 authenticity_token = re.findall('name="authenticity_token" value="(.*?)" />',response.text)[0] print(authenticity_token)
當我們獲取該參數後,即可以代入form-data中完成登錄
附上全部代碼
import requests import re session = requests.Session() #實例化,維持會話 def token(): url_login = 'https://github.com/login' response = session.get(url_login) #通過正則獲取token值 authenticity_token = re.findall('name="authenticity_token" value="(.*?)" />',response.text)[0] return authenticity_token #返回token值 def url_session(token): url = 'https://github.com/session' data = { 'commit': 'Sign in', 'utf8': '✓', 'authenticity_token': token, #authenticity_token參數 'login': '輸入賬號', #你的賬號 'password': '輸入密碼', #你的密碼 'webauthn-support': 'supported', 'required_field_852e': '', 'timestamp': '1565616593723', 'timestamp_secret': '850cb01230466a48f29899e2202265961cdcde8375c4ee69399cd9e9805e1ede', } response = session.post(url,data=data) #傳入form-data表單 return response.text #返回源碼 def save_github(response_text): with open('github.html','w',encoding='utf-8') as fp: fp.write(response_text) if __name__ == '__main__': token = token() #獲取authenticity_token參數 response_text = url_session(token) #獲取網頁源碼 save_github(response_text) #把爬取到的源碼保存為html格式