pc端客户端爬虫_爬虫微博模拟登陆-从移动端到PC端
爬蟲登陸微博,相信是諸多爬蟲愛好者必須跨過得一道坎。這不,這幾天我也在研究如何能夠快速而簡潔得實現登陸功能。
當然,前期工作一定要做好,我先google + 百度了一把市面上的微博登陸教程,發現基本上都是PC端的base64加密用戶名,然后RSA加密拼接關鍵信息,最后組合成POST的from data 進行登陸。
擺在我面前的有兩條路,一條走PC端,一條走移動端。鑒于PC端已經有詳盡教程,此時,我決定走一走移動端的路子。基于以往經驗,任何網站如果有移動端,那一定是非常容易進行爬取的。果不其然,移動端的微博登陸比我想象得還要簡單,一個簡單的POST即可搞定。
與此同時,在抓包的過程中,我亦發現,微博在移動端登陸以后,會先訪問3個cross domain的網址來設置cookie。此刻,請大家注意,經過這三個cross domain的設置后,我們居然可以直接以登陸狀態訪問PC端。即在技術上以移動端作為翹板,完美避開PC端復雜的校驗和加密。
曲線救國,古之人誠不我欺也!
Talk is cheap. Show me the code。
#-*- coding=utf-8
from requests import Session
import json
def formatUrl(urldict):
for key,value in urldict.items():
urldict[key]=value.replace("\\",'')
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
'Referer':'https://passport.weibo.cn/signin/login?entry=mweibo'}
cookies={'_s_tentry':'news.ifeng.com',
'UOR':'news.ifeng.com,widget.weibo.com,tech.ifeng.com'}
url='https://passport.weibo.cn/sso/login'
username=input('pls input weibo ID: ')
pwd =input('pls input weibo password: ')
fromdata={'username':username,'password':pwd,
'savestate':'1','r':None,'ec':'0','pagerefer':None,
'entry':'mweibo','wentry':None,'loginfrom':None,
'client_id':None,'code':None,'qq':None,'mainpageflag':'1',
'hff':None,'hfp':None}
with Session() as s:
s.headers.update(headers)
resp = s.post(url,data=fromdata)
cross_domain_list = json.loads(resp.text)['data']['crossdomainlist']
formatUrl(cross_domain_list)
s.get(cross_domain_list['weibo.com'],cookies=cookies)
#通過cross_domain 獲取PC端的登陸狀態,此時可以以登錄狀態直接訪問PC端的頁面,從而繞過諸多加密校驗
s.get(cross_domain_list['sina.com.cn'])
s.get(cross_domain_list['weibo.cn'])
s.headers.update({'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'})
resp=s.get('https://weibo.com/')
with open('webo.html','wb') as f:
f.write(resp.content)
我宣布:微博的世界, 爬蟲大軍來啦!
注:如果需要鍛煉JS解析能力,建議還是走PC端模擬登陸。
總結
以上是生活随笔為你收集整理的pc端客户端爬虫_爬虫微博模拟登陆-从移动端到PC端的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue手机端回退_从外链回退到vue应用
- 下一篇: 语句摘抄——第20周