如何采集微信公眾號歷史數據



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

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

為了能夠拿到這四個參數,我們需要模擬操作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. 點擊"全部消息"

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

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

  1. # Cookie  
  2. headers = {'Cookie''rewardsn=; wxtokenkey=777; wxuin=584068438; devicetype=android-19; version=26060736; lang=zh_CN; pass_ticket=Rr8cO5c2******3tKGqe7aVZzV9TupvrK+1uHHmHYQGL2WFdKIE; wap_sid2=COKhxu4KElxckFZQ3QzTHU4WThEUk0zcWdrZjhGcUdYdEVSV3Y1X2NPWHNUakRrd1ZzMnpLTERpdE5rbmxjSTg******dlRBcUNRazZpOGxTZUVEQUTgNQJVO'}  
  3.   
  4. url = 'https://mp.weixin.qq.com/mp/profile_ext?'  
  5. data = {}  
  6. data['is_ok'] = '1'  
  7. data['count'] = '10'  
  8. data['wxtoken'] = ''  
  9. data['f'] = 'json'  
  10. data['scene'] = '124'  
  11. data['uin'] = '777'  
  12. data['key'] = '777'  
  13. data['offset'] = '0'  
  14. data['action'] = 'getmsg'  
  15. data['x5'] = '0'  
  16. # 下面三個參數需要替換  
  17. # https://mp.weixin.qq.com/mp/profile_ext?action=home應答數據里會暴漏這三個參數  
  18. data['__biz'] = 'MjM5MzQyOTM1OQ=='  
  19. data['appmsg_token'] = '993_V8%2BEmfVD7g%2FvMZ****4DNUJNFkg~~'  
  20. data['pass_ticket'] = 'Rr8cO5c23ZngeQHRGy8E7gv*****pvrK+1uHHmHYQGL2WFdKIE'  
  21. url = url + urllib.urlencode(data)  
# 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)

 

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

 

輸出結果截圖如下所示:

附示例數據下載:

weixin_articles_sample.xls

 

特別說明:本文旨在技術交流,請勿將涉及的技術用於非法用途,否則一切后果自負。如果您覺得我們侵犯了您的合法權益,請聯系我們予以處理。
☹ Disqus被Qiang了,之前所有的評論內容都看不到了。如果您有爬蟲相關技術方面的問題,歡迎發到我們的問答平台: http://spider.site-digger.com/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM