# Wechat Article Search

> 搜索微信公众号文章，并整理标题、摘要、发布时间、来源公众号和链接。用户提到微信公众号、 公众号文章、微信文章、搜一批公众号资料、按关键词找公众号内容、查某公众号相关报道， 或需要为中文研究收集微信公众平台文章时使用；即使用户只说“搜微信里的文章”也应触发。 本 Skill 负责文章发现和结果整理，不用于批量抓取正文或长期监控。

- Skill: `nexus-research-lab/wechat-article-search` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add nexus-research-lab/wechat-article-search`
- Raw SKILL.md: https://api.skillmd.com/api/skills/nexus-research-lab/wechat-article-search/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: nexus-research-lab (https://skillmd.com/u/nexus-research-lab)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/nexus-research-lab/wechat-article-search

---


# 微信公众号文章搜索

按关键词发现微信公众号文章，并把可核验的搜索结果整理给用户。默认使用内置 Python
脚本访问搜狗微信搜索；脚本依赖 `requests` 与 `beautifulsoup4`。当本机缺少 Python、
依赖未安装、来源限流或页面结构暂时不可解析时，再使用 `WebSearch` / `WebFetch` 做明确
标注的降级检索。

## 运行依赖

需要 Python 3.10+、`requests` 和 `beautifulsoup4`。执行前先检查：

```bash
python3 --version
python3 -c "import requests, bs4"
```

如果 Python 包缺失，先向用户说明需要安装依赖，并在用户同意后执行：

```bash
python3 -m pip install -r "${CLAUDE_SKILL_DIR}/requirements.txt"
```

不要静默安装依赖，也不要改动用户现有的 Python 环境。

## 请求策略

- `requests` 负责 HTTP 会话、Cookie 和超时，`BeautifulSoup` 负责解析搜索结果 DOM。
- 每次请求从有限的浏览器 User-Agent 池中选择一个，并在请求前访问搜狗视频入口预热会话。
- 搜索请求会带基础搜狗 Cookie，并叠加预热响应提供的 `SNUID`；这只是兼容搜狗搜索页的
  请求策略，不代表拥有微信文章访问权限。
- 仍然采用低频人工请求、固定延迟和一次重试；遇到验证码、反爬或限流就停止。

## 执行流程

1. 从用户请求提取关键词、数量和是否需要直达微信链接。数量未指定时用 10，最大 50；
   不要为了默认值额外追问。
2. 先运行脚本。`${CLAUDE_SKILL_DIR}` 在 nxs 与 Claude Code 中都会展开为当前 Skill
   的真实目录：

```bash
python3 "${CLAUDE_SKILL_DIR}/scripts/search.py" "关键词" --num 10
```

3. 读取 stdout JSON，按[结果格式](#结果格式)回答。不要把脚本的“0 条”扩写成“网上没有”；
   它只表示本次来源没有返回可解析结果。
4. 只有用户明确要求 `mp.weixin.qq.com` 直达链接，或后续任务确实需要抓取正文时，才使用
   `--resolve-url`。链接解析会逐条增加请求，建议一次不超过 10 篇：

```bash
python3 "${CLAUDE_SKILL_DIR}/scripts/search.py" "关键词" --num 5 --resolve-url
```

5. 用户要求保存时才传 `--output`，优先写入用户指定目录；未指定目录时先给结果，不要自行
   把文件散落在 workspace 根目录：

```bash
python3 "${CLAUDE_SKILL_DIR}/scripts/search.py" "关键词" --num 20 --output "research/wechat-results.json"
```

### 排序

默认保持搜索相关性顺序。用户明确要“最新”“最近”时，使用 `--sort latest`；这只会对本次
检索到的结果按可解析发布时间降序排列，不能宣称覆盖全部公众号文章：

```bash
python3 "${CLAUDE_SKILL_DIR}/scripts/search.py" "关键词" --num 20 --sort latest
```

## 降级检索

遇到以下情况时停止重复调用脚本，改走降级链路：

- `python3` 不存在，或 stderr 的错误码是 `dependency_missing`；
- stderr 的错误码是 `antispider`、`rate_limited` 或 `page_changed`；
- 连续一次正常重试后仍是网络错误。

使用 `WebSearch` 搜索：

```text
site:mp.weixin.qq.com/s "关键词"
```

对最多 5 个高相关结果用 `WebFetch` 核验标题、公众号和发布时间。只返回工具真实提供的
字段；无法核验的字段写“未核验”，不要从 URL、摘要或账号习惯推断。回答中说明“搜狗微信
检索不可用，以下来自公开网页索引”，避免把降级结果伪装成同一数据源。

如果 `WebSearch` 也未配置或失败，直接说明当前缺少可用搜索来源，并给出可执行建议：
稍后重试、缩短关键词、去掉特殊字符，或让用户提供候选链接。不要循环请求触发更严格限流。

## 结果格式

脚本输出一个 JSON 对象：

```json
{
  "query": "AI Agent",
  "sort": "relevance",
  "total": 1,
  "fetched_at": "2026-07-28T08:00:00.000Z",
  "articles": [
    {
      "title": "文章标题",
      "url": "https://weixin.sogou.com/link?...",
      "summary": "搜索结果摘要",
      "datetime": "2026-07-27 10:30:00",
      "date_text": "2026年07月27日",
      "date_description": "2026年07月27日",
      "source": "公众号名称"
    }
  ]
}
```

向用户展示时优先使用紧凑编号列表，每条包含：

```text
标题 — 公众号 · 发布时间
摘要
链接
```

- `url_resolved: true` 表示已解析为微信直达链接。
- `url_resolved: false` 时保留可访问的搜狗中间链接，不要声称它是直达链接。
- `datetime` 为空表示来源没有提供可解析时间；不要补造日期。
- 用户要求“整理参考资料”时，可在结果之后按主题聚类，但保持原始链接与来源可追溯。

## 使用边界

- 本 Skill 用于低频、人工发起的资料发现，不用于批量采集、持续爬取或规避验证码与明确封禁。
- 尊重站点条款和访问限制；出现验证码、反爬或限流就停止自动重试。
- 搜索结果只证明索引页当时返回了该条目，不证明文章观点、事实或时效性。需要引用文章
  内容时，再获取原文并独立核验。

