写一个监控采集公众号文章的插件

原文链接: mp.weixin.qq.com/s/f8zbM6wMl...

前言

微信关注了很多技术类的公众号,但是一直都没看,所以想先把文章下载下来,放着以后可能一定会看。

之前写的Python微信机器人系列文章里提到了如何hook微信的实时消息,实时消息里也包含了公众号文章的推送,可以获取到文章的标题链接和发布时间,而且获取的很及时,基本公众号已发文推送就能收到。这样我们可以在收到文章后请求到正文然后保存成html,这样也可以防止文章被删除。

后面有时间顺便把这些公众号的历史文章也下载保存成pdf或HTML。已经在计划内了,采集历史并不麻烦,只是我想保存的时候也将文章的评论一起保存(有时候评论里也有有价值的回复),然后就绕了一些弯路。

另外,我创建了一个github仓库来列出这些公众号,方便大家可以看到,如果你觉得某个公众号对你有帮助也可以关注它(不是广告)。后面如果有看到新的关于逆向的公众号也会更新到仓库里。或者大家有啥好的公众号也可以推荐出来。

仓库地址: github.com/kanadebliss...

不过下载完这些历史文章后,分享这些文件也是个问题。如果压缩成一个包放网盘的话不方便更新(我打算每周或者每两周更新一次历史), 如果每次更新压缩成一个包,然后每个公众号一个文件夹的话又不方便上传,也不方便看。等我下载完再看怎么分享吧

导出已关注的公众号列表

这个可以看之前写的一篇文章:【写一个Python微信机器人】第九篇: 导出自己的微信好友列表 。导出的数据里也包含了公众号。

使用教程

安装

  1. 安装支持的版本(3.9.8.15)微信 (下载链接: https://www.123pan.com/s/ihEKVv-XcWx.html 提取码: 5WLu)
  2. 安装Python,版本大于等于3.7
  3. pip install wechat_pyrobot==1.3.0

注入Python到微信

首先创建一个目录,例如robot_code,再创建一个main.py(名称随意)写入以下代码:

python 复制代码
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写入以下内容:

python 复制代码
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也取消了监听文件夹热更新模块,只会看到如下图所示:

python 复制代码
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方式采集的数据多很多。

这个方式还有一点比较好,就是可以在请求列表页的时候获取到每篇文章的阅读数,如果你只是需要链接和阅读数的话,就不需要去每篇文章请求一次阅读数了。

相关推荐
im_AMBER1 小时前
学习日志05 python
python·学习
大虫小呓1 小时前
Python 处理 Excel 数据 pandas 和 openpyxl 哪家强?
python·pandas
哪 吒1 小时前
2025B卷 - 华为OD机试七日集训第5期 - 按算法分类,由易到难,循序渐进,玩转OD(Python/JS/C/C++)
python·算法·华为od·华为od机试·2025b卷
摸爬滚打李上进3 小时前
重生学AI第十六集:线性层nn.Linear
人工智能·pytorch·python·神经网络·机器学习
凛铄linshuo4 小时前
爬虫简单实操2——以贴吧为例爬取“某吧”前10页的网页代码
爬虫·python·学习
牛客企业服务4 小时前
2025年AI面试推荐榜单,数字化招聘转型优选
人工智能·python·算法·面试·职场和发展·金融·求职招聘
胡斌附体4 小时前
linux测试端口是否可被外部访问
linux·运维·服务器·python·测试·端口测试·临时服务器
likeGhee5 小时前
python缓存装饰器实现方案
开发语言·python·缓存
项目題供诗5 小时前
黑马python(二十五)
开发语言·python
读书点滴5 小时前
笨方法学python -练习14
java·前端·python