1. 程式人生 > 程式設計 >基於Python採集爬取微信公眾號歷史資料

基於Python採集爬取微信公眾號歷史資料

鯤之鵬的技術人員將在本文介紹一種通過模擬操作微信App的方式採集指定公眾號的所有歷史資料的方法。

通過我們抓包分析發現,微信公眾號的歷史資料是通過HTTP協議載入的,對應的API介面如下圖所示,其中有四個關鍵引數(__biz、appmsg_token、pass_ticket以及Cookie)。

基於Python採集爬取微信公眾號歷史資料

為了能夠拿到這四個引數,我們需要模擬操作App,讓其產生這些引數,然後我們再抓包獲取。對於模擬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. 點選"通訊錄"

3. 點選"公眾號"

4. 點選要採集的公眾號

5. 點選右上角的使用者影象圖示

6. 點選"全部訊息"

基於Python採集爬取微信公眾號歷史資料

基於Python採集爬取微信公眾號歷史資料

此時,我們可以從https://mp.weixin.qq.com/mp/profile_ext?action=home的應答資料中捕獲__biz、appmsg_token以及pass_ticket三個關鍵引數,以及請求頭中的Cookie值。如下圖所示。

基於Python採集爬取微信公眾號歷史資料

基於Python採集爬取微信公眾號歷史資料

基於Python採集爬取微信公眾號歷史資料

有了上述四個引數,我們就可以構造出獲取歷史文章列表的API請求,通過呼叫API介面直接獲取資料(不需要再模擬App操作)。核心引數如下所示,通過改變offset引數,可以拿到所有歷史資料。

# 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' 
# 下面三個引數需要替換 
# https://mp.weixin.qq.com/mp/profile_ext?action=home應答資料裡會暴漏這三個引數 
data['__biz'] = 'MjM5MzQyOTM1OQ==' 
data['appmsg_token'] = '993_V8%2BEmfVD7g%2FvMZ****4DNUJNFkg~~' 
data['pass_ticket'] = 'Rr8cO5c23ZngeQHRGy8E7gv*****pvrK+1uHHmHYQGL2WFdKIE' 
url = url + urllib.urlencode(data)

以"數字工廠"這個微信公眾號為例,採集過程執行截圖如下所示:

基於Python採集爬取微信公眾號歷史資料

輸出結果截圖如下所示:

基於Python採集爬取微信公眾號歷史資料

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。