【模擬登陸】github模擬登陸,列印資訊流
阿新 • • 發佈:2019-02-18
目的:動態獲取cookie
第一:分析登陸過程
1、開啟開發者工具,檢視各自請求
2、可以看到name為session的請求【方式post,傳入的data】
3、檢視name為login的請求,原始碼中獲得token,作為上一個請求中的data的一部分
第二:登陸以後,解析頁面資訊流資料
檢視資訊流請求的url,自行構建對應的url,解析
1、這裡有個技巧 /div[@id=111]//text() 獲取div下面所以的text()
2、正則的re.sub(' +',' ',str)實現多個空格替換成單獨一個空格
def dd(self): para={ 'page': self.page, 'utf8':'✓' } xml=self.xmlurl+ urlencode(para) res=self.session.get(xml,headers=self.heads) if res.status_code==200: sele=etree.HTML(res.text) dynamics=sele.xpath('//div[@class="d-flex flex-justify-between flex-items-baseline"]') print(dynamics) for i in dynamics: str=''.join(i.xpath('./div//text()')).replace('\n','')#一個div的所有[//]text()全部解析出來,然後構成一個類別,並把換行符替換 str=re.sub(' +',' ',str)#多個空白字元,換成一個 print(str)
第三:整體封裝成一個類方便呼叫
這裡重點關注類的__init__()初始設定的屬性,3個不同的url,當然和Session()會話的呼叫
from lxml import etree import requests from urllib.parse import urlencode import re class gitlogain(): def __init__(self,page): self.heads={ 'Referer': 'https://github.com', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 YaBrowser/18.6.1.770 Yowser/2.5 Safari/537.36', 'Host':'github.com' } self.logainurl='https://github.com/login' self.posturl='https://github.com/session' self.session=requests.Session() self.page=page self.xmlurl='https://github.com/dashboard-feed?' def token(self): ruler=re.compile(r'name="authenticity_token" value="(.*)"./') auth=self.session.get(self.logainurl,headers=self.heads) z=auth.text authenticity_token=ruler.findall(z) print(authenticity_token[0]) return authenticity_token[0] def login(self,email,password): post_data={ 'commit': 'Sign in', 'utf8':'✓', 'authenticity_token':self.token(), 'login': email, 'password': password } ss=self.session.post(self.posturl,headers=self.heads,data=post_data) if ss.status_code==200: self.dd() def dd(self): para={ 'page': self.page, 'utf8':'✓' } xml=self.xmlurl+ urlencode(para) res=self.session.get(xml,headers=self.heads) if res.status_code==200: sele=etree.HTML(res.text) dynamics=sele.xpath('//div[@class="d-flex flex-justify-between flex-items-baseline"]') print(dynamics) for i in dynamics: str=''.join(i.xpath('./div//text()')).replace('\n','')#一個div的所有[//]text()全部解析出來,然後構成一個類別,並把換行符替換 str=re.sub(' +',' ',str)#多個空白字元,換成一個 print(str)