Skills / zjp1997720/zhijian-skills / wxmp-article-harvester wxmp-article-harvester 抓取、筛选并导出微信公众号公开文章的独立 Skill。用户提到微信公众号、公众号文章、mp.weixin、wcx、搜索公众号、导出最近 N 天或某年度文章、批量抓取、断点续抓、正文补全、教程文章筛选、微信文章链接保存时使用。支持 Markdown/JSON/CSV,默认用 wcx 获取索引、Playwright 提取正文;付费 Metaso 兜底必须显式授权。
Published by zjp1997720 ↗ zjp1997720/zhijian-skills Try your first task wxmp-article-harvester
Start a fresh conversation. Replace the highlighted placeholders.
Use wxmp-article-harvester to collect publicly available articles from [WeChat account] for [date range or limit] , export [format] , retain attribution metadata, and use Metaso only if I explicitly authorize its cost and third-party URL sharing. Required inputs User-approved starter prompt based on a pinned source version; check current skill requirements before running. Task evidence ↗
name: wxmp-article-harvester description: 抓取、筛选并导出微信公众号公开文章的独立 Skill。用户提到微信公众号、公众号文章、mp.weixin、wcx、搜索公众号、导出最近 N 天或某年度文章、批量抓取、断点续抓、正文补全、教程文章筛选、微信文章链接保存时使用。支持 Markdown/JSON/CSV,默认用 wcx 获取索引、Playwright 提取正文;付费 Metaso 兜底必须显式授权。 wxmp-article-harvester
目标:把公开公众号文章稳定加工成可检索、可审计、可恢复的本地资料包。
运行架构
preflight.py 只检查依赖,不自动安装或升级任何软件。
wcx_run.py 搜索公众号、刷新登录态、抓元数据并导出索引。
harvest_wxmp.py 过滤日期和标题,复用一个 Playwright 上下文提取正文并保留图片顺序。
首次命中微信验证码或风控页后打开浏览器熔断,停止本轮后续页面请求;刷新失败时保留已通过质量门的旧正文。
没有可信正文时标记 partial。只有用户明确授权付费和第三方 URL 传输后,才加 --allow-metaso。
开始前
运行预检:
python3 <skill-root>/scripts/preflight.py --json
缺少依赖时明确报告并停止。安装命令见 README.md。登录过期由 wcx_run.py 打开浏览器刷新一次;token 不打印,cookie 不进入进程参数。
意图路由
没有指定数量时默认最近 50 篇。最近 N 天默认最多取 min(N × 8, 80) 篇元数据。
硬规则
只接受 https://mp.weixin.qq.com/s... 公开文章链接;拒绝其他域名、协议和带用户信息的 URL。
所有 wcx search/fetch/list/export/status 都走 wcx_run.py。运行时禁止自动 pip install 或强制升级。
--limit、--batch-size 的代码硬上限都是 80。深历史任务使用 offset 游标分批,每轮最多 80 篇,并校验远端总数、头部文章 ID 和上一批边界 ID。
只补正文或重新筛选时加 --skip-fetch,避免重复触发微信频控。
默认不调用 Metaso。用户明确接受付费和把文章 URL 发给第三方后,才使用 --allow-metaso。
wcx 摘要占位、正文尚未抓取、微信页面壳、通用 Video 页面和低信息量结果都不能标记成功。
正文成功后同步更新标题、页面发布时间、作者、来源 URL 和提取通道。索引保存相对路径,迁移目录后仍可用。
默认输出到系统用户数据目录下的 wxmp-article-harvester/exports/<公众号>/;可用 WXMP_HARVEST_HOME 覆盖。
文章仅用于用户授权的研究、学习和归档。保留原文 URL、作者和发布时间;不把抓取结果包装成可再分发版权。
分批与恢复
# 第一轮:按真实 offset 抓一批
python3 scripts/harvest_wxmp.py --account "账号名" --year 2025 --fulltext --batch --batch-size 60
# 到达 .harvest-state.json 的 resume_after 后继续
python3 scripts/harvest_wxmp.py --resume
存在多个待恢复账号时,--resume 会停止并要求补 --account 或 --output-dir。监控 JSON 中的 status、task_id 和 batch.completion_reason;complete 才代表本次契约完成,cursor_drift 必须停止并重新建任务。
常用命令
# 最近 30 天全文,默认不使用付费兜底
python3 scripts/harvest_wxmp.py --account "账号名" --since 30d --fulltext
# 精确日期范围 + 教程标题筛选
python3 scripts/harvest_wxmp.py --account "账号名" \
--from-date 2026-06-25 --to-date 2026-07-25 --fulltext \
--title-regex '(教程|手把手|教你|技巧|实操|实践|工作流)'
# 已有索引,只补正文;用户已明确授权 Metaso
python3 scripts/harvest_wxmp.py --account "账号名" --skip-fetch --fulltext --allow-metaso
输出契约
index.json、index.csv、index.md:文章元数据、相对路径、状态和失败原因。
articles/*.md:保留原文 URL、发布时间、作者、提取通道以及正文中的图片顺序。
harvest-report.md:success、partial、failed 分开统计;任何页面壳或摘要占位进入 unresolved。
.harvest-state.json:稳定任务 ID、配置指纹、批次 offset、远端头/边界 ID、范围、完成原因、全文策略、Metaso 授权和冷却状态。
回执必须说明保存目录、成功/部分/失败数量、报告路径和未解决文章。排障时读取 references/troubleshooting.md。