公
公众号文章抓取
作者:鹿Sir内容创作v1
按公众号名称和日期范围抓取微信公众号文章,转换为本地 Markdown 文件并下载图片,抓取后记录所有文件路径供后续总结问答。当用户需要抓取公众号、获取公众号文章、下载微信文章、保存公众号内容或按名称和日期范围获取某个号的文章时触发。触发词:抓取公众号、公众号文章、微信文章下载、公众号内容保存。
下载量
389
点赞
94
价格
免费
技能文档
---
name: wxpublic-fetch
title: 公众号文章抓取
category: 内容创作
description: 按公众号名称和日期范围抓取微信公众号文章,转换为本地 Markdown 文件并下载图片,抓取后记录所有文件路径供后续总结问答。当用户需要抓取公众号、获取公众号文章、下载微信文章、保存公众号内容或按名称和日期范围获取某个号的文章时触发。触发词:抓取公众号、公众号文章、微信文章下载、公众号内容保存。
---
# 微信公众号文章抓取(wxpublic-fetch)
从微信公众号抓取指定时间范围内的文章,转换为 Markdown 并下载图片到本地,输出带日期索引的文件清单,方便后续直接对文章内容提问总结。
## 使用示例
```text
抓取公众号「拆神」最近 7 天的文章
抓取公众号「拆神」2026-04-01 到 2026-04-21 的文章,保存到 ~/articles
```
## 技能工作流
### 步骤1:解析参数
从用户输入中提取:
- `name`(必填):公众号名称
- `startDate`(可选):格式 `yyyy-MM-dd`,默认为今天往前 7 天
- `endDate`(可选):格式 `yyyy-MM-dd`,默认为今天
- `--output <dir>`(可选):文章保存目录,默认为 `~/wxpublic_articles/<name>`
- `--app-id <AppID>`(可选):平台 AppID,未提供时读取环境变量 `WXPUBLIC_APP_ID`
- `--secret <SecureKey>`(可选):平台 SecureKey,未提供时读取环境变量 `WXPUBLIC_SECURE_KEY`
缺少公众号名称时告知正确用法并停止。`app_id` 与 `secure_key` 均为空(参数和环境变量都未设置)时,向用户说明可通过参数或环境变量提供;尚未拥有凭证的,请前往 https://wxpub.aibana.art 注册并生成,然后停止等待用户提供。
今天的日期从系统获取:
```bash
date +%Y-%m-%d
```
计算起止日期天数差:
```bash
python3 -c "from datetime import date; print((date.fromisoformat('<endDate>') - date.fromisoformat('<startDate>')).days)"
```
如果天数差 **大于 60 天**(约 2 个月),**必须先向用户发出提示并等待确认,不得自动继续**:
> ⚠️ 您查询的时间跨度为 **X 天**(`<startDate>` ~ `<endDate>`),超过 2 个月,可能涉及大量分页请求,**产生较高费用**。是否继续?
用户肯定回复则继续,否定回复则停止并告知已取消。
### 步骤2:获取文章 URL 列表
```bash
python3 "<scripts_dir>/wxpublic_list.py" "<app_id>" "<secure_key>" "<name>" "<startDate>" "<endDate>"
```
`<scripts_dir>` 为本技能 `scripts/` 目录的绝对路径。脚本以 JSON 输出到 stdout:
```json
{
"urls": ["https://mp.weixin.qq.com/s/...", ...],
"date": ["2026-08-04", ...],
"count": 3
}
```
`date` 中每一项是对应文章的发布时间(`yyyy-MM-dd`),与 `urls` 按相同下标一一对应。
解析 stdout 中的 JSON:
- 包含 `"error"` 字段且值为 `"Insufficient balance"`:提示用户「账户余额不足,请前往凭证所在平台充值后重试」,然后停止
- 其他错误:向用户报告错误详情并停止
- `count` 为 0:告知用户该时间范围内没有找到文章并停止
- 正常:告知用户找到几篇文章,即将开始处理
### 步骤3:准备保存目录
```bash
mkdir -p "<output_dir>/images"
```
### 步骤4:并行抓取所有文章的 Markdown
先将步骤2 返回的 `urls` 与 `date` 按下标绑定为清单,写入 `<output_dir>/.wxpublic-articles.json`:
```json
[
{"index": 0, "url": "https://mp.weixin.qq.com/s/...", "date": "2026-08-04"}
]
```
不得只传 URL 后再按并发完成顺序对应日期;每个清单项的 `date` 必须来自同下标的 `date[index]`。
```bash
python3 "<scripts_dir>/wxpublic_fetch.py" "<output_dir>" --manifest "<output_dir>/.wxpublic-articles.json"
```
- 转换并发 **5** 线程,图片下载并发 **8** 线程
- 每篇文章转换失败时自动重试 **1 次**;第二次仍失败才记录为失败
- 从输出中解析 `RESULT:<json>`。每条结果包含 `index`、`url`、`date`、`ok`、`path` 和 `error`;用 `ok=true` 且 `path` 非空的记录收集成功路径并保留其 `date`;对 `ok=false` 使用同一条记录的 `url` 和 `error`
### 步骤5:汇总报告
所有文章处理完毕后,输出汇总:
```
✓ 已保存 N 篇文章到 <output_dir>
保存的文件:
1. 2026-08-04 | /path/to/article1.md
2. 2026-08-03 | /path/to/article2.md
...
(如有跳过)以下文章处理失败:
- https://mp.weixin.qq.com/s/... (原因)
```
**重要**:将所有成功记录的 `.md` 文件路径与 `date`、`url` 一起存入对话上下文,便于用户后续直接问「帮我总结这些文章」或「这些文章讲了什么」时,能直接读取对应文件内容作答。
## 注意事项
- 微信图片 URL(`mmbiz.qpic.cn`)有防盗链,下载时加上 `-L` 跟随重定向,如果失败则保留原始 URL
- 文件名中不能含有 `/ \ : * ? " < > |` 等字符
- 如果公众号名称包含特殊字符,在 JSON 请求体中正确转义
- 图片文件夹 `images/` 统一放在文章保存目录下,所有文章共享该目录(避免重复下载相同图片)使用说明
# 公众号文章抓取 按公众号名称和日期范围抓取微信公众号文章,自动转换为本地 Markdown 并下载图片,输出带日期索引的文件清单,抓取结果可直接用于总结与问答。 ## 使用 ```text 抓取公众号「拆神」最近 7 天的文章 抓取公众号「某公众号」2026-04-01 到 2026-04-21 的文章,保存到 ~/articles ``` 需要平台凭证:通过 `--app-id` / `--secret` 参数或环境变量 `WXPUBLIC_APP_ID` / `WXPUBLIC_SECURE_KEY` 提供;尚未拥有的前往 https://wxpub.aibana.art 注册生成(有免费额度,超过 60 天的大范围查询会先确认费用)。 ## 工作原理 先调用文章列表接口按名称与时间范围取得文章 URL 与发布日期,再以 5 线程并发转换 Markdown、8 线程并发下载图片(微信图片带防盗链,自动跟随重定向),单篇失败自动重试一次,最后输出「日期 + 文件路径」汇总清单并存入上下文供后续问答。
支持平台:Qoder · QoderWork · Claude · Codex 等 AI 编程助手