1837 字
9 分钟
记录如何抓取微信群聊信息格式化写入共享文档
2025-12-02

目前找家教的形式一般为接单老师加入家教中介的微信/QQ群,每天在群聊中翻阅家教中介转发的家教信息.但面对各种各样格式不同的家教信息,反复翻阅对比容易失去耐心.如果我能把群聊中的家教信息整合成到共享表格中,方便排序和筛选,既方便我找家教,还可以把家教信息以表格形式贩卖出去赚信息差价.于是我从微信入手,做了一个自动抓取群聊信息,交给大模型处理,再写入共享文档的小程序

可点击这里 预览我做的表格

一:思路#

大致思路很简单:

①从群聊抓取信息

②交给大模型格式化信息

③写入共享文档

①从群聊抓取信息#

对于从群聊抓取信息,网上的其中一种方案是RPA:抓取界面元素.程序会打开微信界面,只要捕捉到了界面有发送信息后出现的聊天泡泡,就把这条信息的内容图片转文字识别出来.但这种方式太low了,且只能处理单个群聊,直接PASS掉了.

我就想,微信接受信息时,肯定会收到请求,也肯定会有个函数接受信息,如果我能找到这个函数,捕捉它的参数,就可以解析出发送回来的信息了!如果微信还提供接受信息的接口的话,那么会更方便,可惜个人微信没有开发者平台,个人微信的接口并不暴露出来,这又难倒我了.

我顺着这个思路在网上搜方案,发现github上确实有一个使用hook暴露微信接口的代码库:wxhelper 原理是逆向PC端微信客户端,定位其中相关功能发生时,程序中哪些事件发生,然后编写dll文件,在微信运行时注入到微信中,创建一个http服务端,往该服务端发送请求时,使得微信程序中指定的事件发生,以此来模拟暴露出微信接口的.这其中也自然包括了接受信息

难点在于wxhelper只支持特定版本,但时至今日,微信已经发布了4.x版本,已经换框架了!当我尝试使用这些低版本登录微信时,会强制提示我微信版本过低不予登录.网上的方法是,修改注册表中微信的版本号,这样登录请求发到服务器时,服务器校验时会认定这是新版本,就不会触发微信的低版本拒绝登录了!

可我试了试,居然不行!我看了看,换了框架之后的4.x版本的注册表的位置跟3.x版本的注册表的位置不同了,我猜测微信服务器只校验4.x版本的注册表,而不会校验3.x版本的注册表.因此我无法再使用旧版本微信了.我天!

但我还是不愿放弃wxhelper,因为我在b站还是可以看到有卖工具的成功登录上旧版本.然后我登录到微信官网,尝试在官网看看能不能下载到旧版本微信(我之前是通过github下载旧版本微信的),发现了一点:32位的微信的最新版本仍然是3.x.既然存在3.x版本,那么微信官方一定给3.x版本留了校验通道,于是下载32位微信,重复之前的改注册表步骤,嘻,成功力!

然后就是根据wxhelper的步骤,在启动的微信中注入dll,使用postman测试接口,成功!

②交给大模型格式化信息#

由于各个家教群的消息格式不统一,你可以看见: SZXY2025 【地址】:XXXX 【年级】:XXXX 【基本情况】:XXXX…

也可以看见: 12.5 新单 地点 科目 时间

所以我不可能为每一种格式都编写代码处理,这不现实.因此把任务交给大模型处理会是好主意.我提前创建好共享文档,设置其中的表头,然后让大模型严格按照飞书多维表格的批量插入记录的参数格式化数据,这一步比较简单

③写入共享文档#

我选择飞书多维表格,就是因为飞书给个人开发者提供接口,我在第二步接受大模型的响应后,对响应结果进行处理(json格式化,去markdown标记)等,直接调用飞书多维表格的批量插入接口即可

二:遇到的其他问题及粗糙处理#

1.过滤非家教信息#

为了避免非家教信息污染表格以及浪费token,设置了一个过滤器进行粗糙处理,对hook到的50字符以下的信息不予处理,且50字符以上的也必须包含提前硬编码的关键词

2.设计表头#

写入信息发布人的wxid和昵称,方便跟对应的中介联系.

wxid区别于微信号,wxid是微信数据库中唯一标识某用户的ID,用户账户一创建就分配的,不可修改且无法通过此途径添加好友;微信号是用户自己设置的,可用于被其他用户查找到的ID,可修改且可通过搜索微信号添加好友.因为wxhelper不提供查询微信号的接口,只提供了查询好友列表的接口,在好友列表中才会有对应的微信号,因此我必须先添加中介为好友,才能获取到他的微信号,这一步仍需完善

添加了原文字段,方便查询者查看家教信息的原文

添加了UpdateTime,方便排序;添加了原文(不带标点),方便查重;这两个字段对用户隐藏

3.去重处理#

由于我的数据是经过大模型处理后写入表格的,而大模型每次对话不是100%严格遵照你的格式输出的,即使是同样的输入,输出也可能不同,所以我很难设计一个主键

而不进行去重的话,会造成token的浪费和表格数据的冗杂,所以我还是做了勉强的补救措施:我设计了原文(不带标点)字段,把原文字段的值去掉换行符,标点和空格,然后当大模型处理完之后,我先获取到响应结果中的原文的值,然后取第20-40个字符,去表中模糊匹配;如果匹配成功则说明重复,那么就查看日期,若日期不为今天,则更新日期和UpdateTime,然后跳过这条数据的处理;

当然,这只针对于家教信息相同,格式相同的情况;但也有同一条家教信息,但格式不同的情况;遇到这种情况,只好额外进行另一次查询:精密查询地点+学段+科目,若这都能查到,才说明重复

记录如何抓取微信群聊信息格式化写入共享文档
https://gunbrad.xyz/posts/记录如何抓取微信群聊信息格式化写入共享文档/
作者
Gunbrad
发布于
2025-12-02
许可协议
CC BY-NC-SA 4.0