Skip to content

数据分析师如何用微信公众号文章数据做行业词频与趋势分析 ​

做行业研究或舆情分析的数据分析师经常要回答这样的问题:"某个行业过去一个月的高频词是什么""哪些话题的讨论量在上升""不同公众号对同一事件的措辞差异有多大"。这类问题的答案本来就藏在公众号文章里,但要拿到能跑分析的原始文本,往往要先解决一个不算"分析"的问题:怎么把几十上百篇文章的全文,稳定、持续地弄成结构化数据。

现实的做法通常是人工打开文章、复制正文、粘贴进 Excel 或文本文件,再手动记录发布时间和来源账号。这个环节本身就要耗费大量时间,而且容易漏发、漏抓——公众号更新没有固定节奏,分析师不可能守着几十个号实时盯更新。等真正坐下来跑分词、统计词频、画趋势图时,才发现语料本身残缺不全,统计结果的可信度也打了折扣。

更麻烦的是长期趋势分析。如果要看一个话题在三个月里的讨论热度变化,就需要连续、不间断地积累数据;一旦中间断更或漏采集,趋势曲线就会失真。人工采集很难保证这种连续性,尤其是当分析师同时要跟踪十几个甚至几十个账号的时候。

问题的核心:公众号内容没有可编程的读取方式 ​

微信公众号平台没有对外提供订阅或抓取接口,第三方工具无法直接把公众号文章接入 Python 脚本、ETL 管道或自建的语料库。这意味着"分词统计词频"这种技术上并不复杂的分析任务,第一步的数据获取反而是最大的瓶颈——不是算法难,是拿不到干净、持续更新的全文数据。

解决路径:把公众号文章变成可编程的结构化语料 ​

Mp2RSS 是一个微信公众号文章数据服务:贴入目标公众号任意一篇文章的链接(形如 https://mp.weixin.qq.com/s?...),即可订阅该公众号,此后它发布的每一篇新文章都会被持续收录并转换成带 Markdown 正文的结构化数据,从发文到数据可见平均 2–3 小时。使用时不需要微信账号,用 GitHub 或 Google 账号登录即可完成注册。

订阅完成后,文章不再是需要人工打开才能读到的内容,而是一份可以用代码持续拉取、逐条落库的语料流,天然适合接入分词、词频统计、话题聚类这类文本挖掘流程。

落地步骤 ​

第一步:按行业圈定账号并批量订阅 ​

先确定要跟踪的行业范围,列出该领域内活跃的公众号(行业媒体、企业官号、协会/机构号等)。逐个找到任意一篇历史文章的链接完成订阅,具体操作参考订阅管理指引。需要注意,首次订阅不会回溯该号此前发布的历史文章,只从订阅时刻起持续收录新文章,因此如果分析需要覆盖某个时间窗口,建议尽早把相关账号一次性订阅完。

账号数量较多时,用 CLI 批量订阅比逐个在网页操作更高效:

bash
mp2rss auth login                              # 首次使用先登录
mp2rss mp subscribe https://mp.weixin.qq.com/s/xxxxxxxxxx

把清单里每个账号的文章链接依次替换执行,几十个号可以写成一个简单的 shell 循环批量跑完。完整的鉴权与调用方式可以从快速开始了解。

第二步:定期拉取增量文章,落地为分析用语料 ​

数据分析师的典型消费方式是程序化拉取,而不是人工点开阅读。用 CLI 按公众号拉取文章列表,-o json 输出可以直接接 jq 或 Python 脚本处理:

bash
mp2rss mp list -o json | jq -r '.items[].mpId'   # 先拿到订阅账号的 mpId 列表

mp2rss mp articles 2234567 -o json > articles_2234567.json

返回的每条记录都带 title、publishedAt、contentMarkdown 等字段,正文以 Markdown 形式给出,可以直接用 Python 读入、剥离 Markdown 标记后送入分词器:

python
import json, jieba
from collections import Counter

with open("articles_2234567.json") as f:
    items = json.load(f)["items"]

words = []
for item in items:
    words += jieba.lcut(item["contentMarkdown"])

top20 = Counter(w for w in words if len(w) > 1).most_common(20)

如果需要接入更大规模的调度或增量抓取任务,也可以直接调用 Open API:

bash
curl "https://mp2rss.bugcode.dev/open-api/subscriptions/{mpId}/articles" \
  -H "Authorization: Bearer {feed_key}"

把这一步做成定时任务(cron 或调度平台),按天或按周增量拉取新文章追加进本地语料库,就能持续积累一份带时间戳的行业文本数据,而不必每次分析前重新采集。

第三步:按时间维度统计词频走势,自动出报告 ​

语料落地后,趋势分析的关键是保留 publishedAt 时间戳,按周或按月切片分别统计高频词和词频变化,而不是把所有文章混在一起算一次静态词频。常见做法:

  • 按周聚合文章,分别跑分词与 TF-IDF,观察某个词的权重在周与周之间的变化;
  • 对比不同公众号对同一事件的用词差异,识别措辞倾向;
  • 把统计结果自动生成图表和文字摘要,定期输出成周报或月报,减少人工整理环节。

由于原始数据本身已经是结构化的 Markdown 全文,这一层的自动化只需要处理分析逻辑,不用再花时间清洗抓取来的格式混乱的文本。

效果对比 ​

维度人工采集整理结构化数据管道
覆盖账号数受精力限制,通常个位数到十几个可批量订阅数十个号
语料连续性易漏更新,趋势曲线易失真持续收录,从发文到数据可见平均 2–3 小时
正文格式复制粘贴格式混乱,需人工清洗统一 Markdown,可直接送入分词器
报告产出手工汇总,周期长可脚本化自动生成周报/月报

常见问题 ​

统计词频需要先拿到公众号的历史全部文章吗? 不一定。首次订阅不会回溯历史文章,只从订阅时刻起持续收录新发布的内容。如果分析需要覆盖某个历史时间段,建议尽早订阅目标账号,让数据积累从当前时间点开始持续进行。

正文数据是纯文本还是保留了排版结构? 以 Markdown 格式交付正文,保留标题层级、列表、加粗等基本结构,既可以直接剥离标记做纯文本分词,也可以保留结构做更细粒度的信息抽取。

能否用脚本批量订阅几十个公众号,而不用逐个在网页操作? 可以。CLI 与 Open API 都支持订阅接口,写一个简单的循环脚本,把账号清单里每个号的文章链接依次提交即可完成批量订阅。

一个账号能同时跟踪多少个公众号做语料采集? 按套餐档位区分:49 元/月支持 50 个订阅、99 元/月支持 100 个、399 元/月支持 400 个,各档位功能权益一致,仅订阅数量上限不同,详见会员与计费。

除了微信公众号,还能一起纳入同一份语料库吗? 支持订阅 X(Twitter)账号,同样以结构化数据交付,可以和公众号文章数据合并进同一套文本挖掘或趋势分析管道。


想了解更完整的接口与命令行能力,可以从快速开始与命令参考继续查看;也可以直接访问 Mp2RSS 产品主站,贴入一篇文章链接试订一个行业公众号。