原文連結: https://mp.weixin.qq.com/s/f8zbM6wMld3koqjaFbCuxw
前言
微信關注了很多技術類的公眾號,但是一直都沒看,所以想先把文章下載下來,放著以後可能一定會看。
之前寫的Python微信機器人系列文章裡提到了如何hook微信的實時訊息,實時訊息裡也包含了公眾號文章的推送,可以獲取到文章的標題連結和釋出時間,而且獲取的很及時,基本公眾號已發文推送就能收到。這樣我們可以在收到文章後請求到正文然後儲存成html,這樣也可以防止文章被刪除。
後面有時間順便把這些公眾號的歷史文章也下載儲存成pdf或HTML。已經在計劃內了,採集歷史並不麻煩,只是我想儲存的時候也將文章的評論一起儲存(有時候評論裡也有有價值的回覆),然後就繞了一些彎路。
另外,我建立了一個github倉庫來列出這些公眾號,方便大家可以看到,如果你覺得某個公眾號對你有幫助也可以關注它(不是廣告)。後面如果有看到新的關於逆向的公眾號也會更新到倉庫裡。或者大家有啥好的公眾號也可以推薦出來。
倉庫地址: https://github.com/kanadeblisst00/high-quality-biz
不過下載完這些歷史文章後,分享這些檔案也是個問題。如果壓縮成一個包放網盤的話不方便更新(我打算每週或者每兩週更新一次歷史), 如果每次更新壓縮成一個包,然後每個公眾號一個資料夾的話又不方便上傳,也不方便看。等我下載完再看怎麼分享吧
匯出已關注的公眾號列表
這個可以看之前寫的一篇文章:【寫一個Python微信機器人】第九篇: 匯出自己的微信好友列表 。匯出的資料裡也包含了公眾號。
使用教程
安裝
- 安裝支援的版本(3.9.8.15)微信 (下載連結:
https://www.123pan.com/s/ihEKVv-XcWx.html
提取碼:5WLu
) - 安裝Python,版本大於等於3.7
pip install wechat_pyrobot==1.3.0
注入Python到微信
首先建立一個目錄,例如robot_code
,再建立一個main.py
(名稱隨意)寫入以下程式碼:
from py_process_hooker import inject_python_and_monitor_dir
from wechat_pyrobot import get_on_startup
from wechat_pyrobot.msg_plugins import MonitorBiz
if __name__ == "__main__":
process_name = "WeChat.exe"
open_console = True
on_startup = get_on_startup(msg_plugins=[MonitorBiz])
inject_python_and_monitor_dir(process_name, __file__, open_console=open_console, on_startup=on_startup)
啟動並登入微信,執行這個main.py就會把Python注入到微信並且開啟控制檯。只要收到公眾號的文章推送,控制檯就會列印出來
編寫自己的處理外掛
上面的外掛只是演示了怎麼獲取公眾號文章的資料,我直接將資料列印在了控制檯。如果你需要儲存到檔案或者資料庫,你只需要繼承這個外掛,然後重寫相應的方法。
假設你在main.py同目錄建立了一個資料夾plugins
,然後建立了一個檔案biz.py
寫入以下內容:
import os
import json
from wechat_pyrobot.msg_plugins import MonitorBiz
class MyMonitorBiz(MonitorBiz):
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.name = os.path.basename(__file__)
# 注意當前所在目錄是微信目錄,而不是main.py所在目錄,所以需要用__file__來定位
main_path = os.path.dirname(os.path.dirname(__file__))
self.save_path = os.path.join(main_path, "公眾號監聽資料.json")
def save_items(self, items):
# item是包含多個資料(字典)的列表
with open(self.save_path, 'a', encoding='utf-8') as f:
for item in items:
print(item)
f.write(json.dumps(item) + '\n')
接著在啟動的時候傳你自定義的外掛即可,其他程式碼不用變。因為沒有傳httpapi外掛,所以不會有fastapi開啟http的提示。wechat_pyrobot1.3.0也取消了監聽資料夾熱更新模組,只會看到如下圖所示:
from py_process_hooker import inject_python_and_monitor_dir
from wechat_pyrobot import get_on_startup
from plugins.biz import MyMonitorBiz
if __name__ == "__main__":
process_name = "WeChat.exe"
open_console = True
on_startup = get_on_startup(msg_plugins=[MyMonitorBiz])
inject_python_and_monitor_dir(process_name, __file__, open_console=open_console, on_startup=on_startup)
有公眾號發文的話你就能看到公眾號監聽資料.json
檔案被建立,裡面也有資料了。
公眾號採集
目前採集微信公眾號的文章資料,實時的話基本都得hook。一是時效性高,另外就是不需要主動請求介面,不受介面限制,只需要關注公眾號等待公眾號發文即可。其中hook Windows端微信的應該最多,因為Windows機器成本低,且可以用伺服器長期穩定的執行。
採集歷史文章的話,目前能使用的還有以下方式:
- 微信公眾平臺
- 微信讀書
- windows抓包http介面
- 微信官方客戶端(Android、windows等)的非http介面
- 一些第三方平臺,清博等
微信公眾平臺和windows的http介面使用的人比較多,因為技術難度低,只需要抓包到cookie或者引數就能使用,介面也都沒加密。
windows http介面的入口連結 : https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU0OTkwODU2MA==
。使用biz拼連結然後訪問,再用mitmproxy等監聽工具修改js來自動化操作(翻頁和攔截引數)。但這種方法最近老是被封介面,以前只會封24小時,現在最長可以封一個月。所以我這邊已經拋棄了這種方式。
第二種則是新版本開啟公眾號出現的視窗,這種不是http介面,只能使用hook或者協議來請求。有意思的是這個介面可以無限請求,不會被封介面,但如果請求很頻繁並且到達一定量的話會封號,所以需要限制一下每天的請求量。當然,在限制的情況下也比http方式採集的資料多很多。
這個方式還有一點比較好,就是可以在請求列表頁的時候獲取到每篇文章的閱讀數,如果你只是需要連結和閱讀數的話,就不需要去每篇文章請求一次閱讀數了。
本文由部落格一文多發平臺 OpenWrite 釋出!