无法通过公开api获取微信公众号历史文章及阅读/点赞数,因微信未开放该接口,所有爬取方案均属违规且高风险。

微信公众号历史文章列表和阅读/点赞数无法通过公开、合法的 API 直接获取。微信官方未开放该数据接口,所有声称“稳定抓取公众号文章数据”的方案,本质都是模拟浏览器行为绕过前端限制,极易失效且存在封号、IP 封禁、反爬识别等风险。
为什么 requests + BeautifulSoup 会返回空内容或登录页
微信公众号历史页面(如 https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=xxx)依赖 JavaScript 渲染核心内容:文章列表由 AJAX 动态加载,且请求需携带有效的 cookie(含 ua、uin、key、wxsid 等),同时校验 Referer、User-Agent、请求频率与行为特征。
常见错误现象:
- 返回 HTML 中只有
<div id="app"></div>,无实际文章节点 - 重定向到微信登录页(
https://mp.weixin.qq.com/cgi-bin/loginpage) - 返回
{"base_resp":{"ret":-200001,"err_msg":"invalid session"}}
根本原因:未维持有效登录态,或未复现 JS 生成的加密参数(如 pass_ticket、sign)。
使用 Puppeteer / Playwright 模拟登录后仍失败的关键点
即使借助无头浏览器完成扫码登录,后续请求仍大概率失败,因为微信服务端会校验:
安全 Python 代码沙箱:在隔离的沙箱中执行任意 Python 代码,预装 requests、NumPy、pandas 库。返回 stdout、stderr。
-
cookie中的ticket和key有极短有效期(通常 ≤ 2 小时),且与设备指纹强绑定 - 每次拉取文章列表需调用
getmasssendmsg接口,其token参数来自页面 JS 运行时生成,无法静态提取 - 接口返回的
general_msg_list是 base64 编码的 JSON 字符串,需解码后解析,但字段结构不固定(如comm_msg_info内嵌层级深、字段名缩写多)
实操建议:
若必须尝试,优先用 Playwright(比 Puppeteer 更抗检测)启动 Chromium 并手动扫码登录;等待页面完全加载后,用 page.evaluate() 执行 JS 提取 window.cgiData 或 document.querySelector('script:contains("general_msg_list")') 中的原始数据字符串,而非直接发 xhr 请求。
阅读数和点赞数在 2020 年后已对第三方彻底隐藏
自 2020 年 7 月起,微信公众号后台取消对外展示“原文阅读数”和“点赞数”,仅运营者本人在登录后可查看(且需进入每篇文章详情页,数据也不再实时更新)。所有网络上流传的“抓取阅读/点赞数”脚本,实际获取的是:
- 旧缓存数据(来自早期未下线的接口,现已全部失效)
- 用户自行上报的估算值(非微信官方数据)
- 伪造的 mock 响应(用于演示,无真实来源)
目前唯一合法获取方式是:公众号管理员登录 https://mp.weixin.qq.com,在「数据统计 → 图文分析」中导出 Excel —— 该过程无法自动化,且受微信登录保护机制限制,不可批量操作。
真正稳定的路径只有一条:申请成为微信认证的服务号,接入「微信公众号平台接口」中的 datacube.getarticletotal(需用户授权并开通高级接口权限),但该接口仅返回“累计阅读人数”,不提供单篇阅读数、点赞数,且仅支持最近 7 天数据。其他任何“全量历史+精确点赞”的方案,本质上都在对抗微信的反爬体系,维护成本高、存活时间短、法律风险明确。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










