基于Python采集爬取微信公眾號歷史數(shù)據(jù)
鯤之鵬的技術(shù)人員將在本文介紹一種通過模擬操作微信App的方式采集指定公眾號的所有歷史數(shù)據(jù)的方法。
通過我們抓包分析發(fā)現(xiàn),微信公眾號的歷史數(shù)據(jù)是通過HTTP協(xié)議加載的,對應(yīng)的API接口如下圖所示,其中有四個關(guān)鍵參數(shù)(__biz、appmsg_token、pass_ticket以及Cookie)。
為了能夠拿到這四個參數(shù),我們需要模擬操作App,讓其產(chǎn)生這些參數(shù),然后我們再抓包獲取。對于模擬App操作,前面我們曾介紹過通過Python模擬安卓App的方法(詳見http://www.site-digger.com/html/articles/20180912/664.html)。對于HTTP集成抓包,前面我們曾介紹過Mitmproxy(詳見http://www.site-digger.com/html/articles/20181109/682.html)。
我們需要模擬操作微信完成如下步驟:
1. 啟動微信App
2. 點(diǎn)擊'通訊錄'
3. 點(diǎn)擊'公眾號'
4. 點(diǎn)擊要采集的公眾號
5. 點(diǎn)擊右上角的用戶圖像圖標(biāo)
6. 點(diǎn)擊'全部消息'
此時,我們可以從https://mp.weixin.qq.com/mp/profile_ext?action=home的應(yīng)答數(shù)據(jù)中捕獲__biz、appmsg_token以及pass_ticket三個關(guān)鍵參數(shù),以及請求頭中的Cookie值。如下圖所示。
有了上述四個參數(shù),我們就可以構(gòu)造出獲取歷史文章列表的API請求,通過調(diào)用API接口直接獲取數(shù)據(jù)(不需要再模擬App操作)。核心參數(shù)如下所示,通過改變offset參數(shù),可以拿到所有歷史數(shù)據(jù)。
# Cookie headers = {’Cookie’: ’rewardsn=; wxtokenkey=777; wxuin=584068438; devicetype=android-19; version=26060736; lang=zh_CN; pass_ticket=Rr8cO5c2******3tKGqe7aVZzV9TupvrK+1uHHmHYQGL2WFdKIE; wap_sid2=COKhxu4KElxckFZQ3QzTHU4WThEUk0zcWdrZjhGcUdYdEVSV3Y1X2NPWHNUakRrd1ZzMnpLTERpdE5rbmxjSTg******dlRBcUNRazZpOGxTZUVEQUTgNQJVO’} url = ’https://mp.weixin.qq.com/mp/profile_ext?’ data = {} data[’is_ok’] = ’1’ data[’count’] = ’10’ data[’wxtoken’] = ’’ data[’f’] = ’json’ data[’scene’] = ’124’ data[’uin’] = ’777’ data[’key’] = ’777’ data[’offset’] = ’0’ data[’action’] = ’getmsg’ data[’x5’] = ’0’ # 下面三個參數(shù)需要替換 # https://mp.weixin.qq.com/mp/profile_ext?action=home應(yīng)答數(shù)據(jù)里會暴漏這三個參數(shù) data[’__biz’] = ’MjM5MzQyOTM1OQ==’ data[’appmsg_token’] = ’993_V8%2BEmfVD7g%2FvMZ****4DNUJNFkg~~’ data[’pass_ticket’] = ’Rr8cO5c23ZngeQHRGy8E7gv*****pvrK+1uHHmHYQGL2WFdKIE’ url = url + urllib.urlencode(data)
以'數(shù)字工廠'這個微信公眾號為例,采集過程運(yùn)行截圖如下所示:
輸出結(jié)果截圖如下所示:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 淺談SpringMVC jsp前臺獲取參數(shù)的方式 EL表達(dá)式2. 關(guān)于Ajax跨域問題及解決方案詳析3. jsp+servlet簡單實現(xiàn)上傳文件功能(保存目錄改進(jìn))4. 刪除docker里建立容器的操作方法5. JavaScript實現(xiàn)組件化和模塊化方法詳解6. .Net Core和RabbitMQ限制循環(huán)消費(fèi)的方法7. ASP.NET MVC遍歷驗證ModelState的錯誤信息8. SpringMVC+Jquery實現(xiàn)Ajax功能9. jsp網(wǎng)頁實現(xiàn)貪吃蛇小游戲10. ASP中if語句、select 、while循環(huán)的使用方法
