基于Python采集爬取微信公眾號(hào)歷史數(shù)據(jù)
鯤之鵬的技術(shù)人員將在本文介紹一種通過(guò)模擬操作微信App的方式采集指定公眾號(hào)的所有歷史數(shù)據(jù)的方法。
通過(guò)我們抓包分析發(fā)現(xiàn),微信公眾號(hào)的歷史數(shù)據(jù)是通過(guò)HTTP協(xié)議加載的,對(duì)應(yīng)的API接口如下圖所示,其中有四個(gè)關(guān)鍵參數(shù)(__biz、appmsg_token、pass_ticket以及Cookie)。

為了能夠拿到這四個(gè)參數(shù),我們需要模擬操作App,讓其產(chǎn)生這些參數(shù),然后我們?cè)僮グ@取。對(duì)于模擬App操作,前面我們?cè)榻B過(guò)通過(guò)Python模擬安卓App的方法(詳見(jiàn)http://www.site-digger.com/html/articles/20180912/664.html)。對(duì)于HTTP集成抓包,前面我們?cè)榻B過(guò)Mitmproxy(詳見(jiàn)http://www.site-digger.com/html/articles/20181109/682.html)。
我們需要模擬操作微信完成如下步驟:
1. 啟動(dòng)微信App
2. 點(diǎn)擊"通訊錄"
3. 點(diǎn)擊"公眾號(hào)"
4. 點(diǎn)擊要采集的公眾號(hào)
5. 點(diǎn)擊右上角的用戶圖像圖標(biāo)
6. 點(diǎn)擊"全部消息"


此時(shí),我們可以從https://mp.weixin.qq.com/mp/profile_ext?action=home的應(yīng)答數(shù)據(jù)中捕獲__biz、appmsg_token以及pass_ticket三個(gè)關(guān)鍵參數(shù),以及請(qǐng)求頭中的Cookie值。如下圖所示。



有了上述四個(gè)參數(shù),我們就可以構(gòu)造出獲取歷史文章列表的API請(qǐng)求,通過(guò)調(diào)用API接口直接獲取數(shù)據(jù)(不需要再模擬App操作)。核心參數(shù)如下所示,通過(guò)改變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'
# 下面三個(gè)參數(shù)需要替換
# https://mp.weixin.qq.com/mp/profile_ext?action=home應(yīng)答數(shù)據(jù)里會(huì)暴漏這三個(gè)參數(shù)
data['__biz'] = 'MjM5MzQyOTM1OQ=='
data['appmsg_token'] = '993_V8%2BEmfVD7g%2FvMZ****4DNUJNFkg~~'
data['pass_ticket'] = 'Rr8cO5c23ZngeQHRGy8E7gv*****pvrK+1uHHmHYQGL2WFdKIE'
url = url + urllib.urlencode(data)
以"數(shù)字工廠"這個(gè)微信公眾號(hào)為例,采集過(guò)程運(yùn)行截圖如下所示:

輸出結(jié)果截圖如下所示:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python調(diào)用c++傳遞數(shù)組的實(shí)例
今天小編就為大家分享一篇python調(diào)用c++傳遞數(shù)組的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
Python實(shí)現(xiàn)圖像增強(qiáng)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)圖像增強(qiáng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
利用python計(jì)算時(shí)間差(返回天數(shù))
這篇文章主要給大家介紹了關(guān)于如何利用python計(jì)算時(shí)間差(返回天數(shù))的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Python fileinput模塊如何逐行讀取多個(gè)文件
這篇文章主要介紹了Python fileinput模塊如何逐行讀取多個(gè)文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
使用Python 操作 xmind 繪制思維導(dǎo)圖的詳細(xì)方法
在平時(shí)的工作中當(dāng)我們要總結(jié)一些知識(shí)的時(shí)候就需要一款工具來(lái)畫(huà)畫(huà)流程圖,這里推薦 XMind 軟件,用 Xmind 繪制的思維導(dǎo)圖看起來(lái)思路清晰,那么今天的文章介紹關(guān)于思維導(dǎo)圖的相關(guān)知識(shí)以及用 Python 如何操作 Xmind 繪制思維導(dǎo)圖2021-10-10
python scipy.spatial.distance 距離計(jì)算函數(shù) ?
本文主要介紹了python scipy.spatial.distance 距離計(jì)算函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03

