# Baidu Search

> 百度联网检索。search 按关键词搜索网页返回摘要/链接；extract 阅读指定网页提取正文。 用户要搜索、查资料时用 search；要读某篇文章、看某个链接内容时用 extract。

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

---


# baidu-search

百度搜索 + 网页正文提取，两个命令按需选用：

- `search`：按关键词联网检索，返回标题/链接/摘要/时间。用户要"搜索""查一下""找文章"时使用。
- `extract`：抓取指定网页并提取正文，返回标题/正文/日期/作者。用户要"读一下这篇文章""看看这个链接"时使用。`search` 返回的 `url` 可直接传给 `extract`。

## 调用

通过 `run_skill_script` 执行 `baidu_search_cli.py`。

### search
**使用 search 联网搜索发现关键词相关的网页**

```json
{
  "skill_name": "baidu-search",
  "script_name": "baidu_search_cli.py",
  "script_args": ["search", "关键词", "--num", "30"]
}
```

| 参数 | 说明 |
|------|------|
| `keyword` | 搜索关键词（位置参数） |
| `--num N` | 返回条数，1~50，默认 30 |
| `--client` | `curl_cffi`（默认，模拟 Chrome 指纹）或 `requests`。curl_cffi 不兼容时换 requests |

search 返回结果中的 results 的 url 就是需要调用 extract 提取url正文。如果某个result对你有用，你必须使用它的 url 来调用 extract。禁止完全只通过 search 的摘要就回答用户问题。

### extract
**使用extract提取指定url网页的正文内容**

```json
{
  "skill_name": "baidu-search",
  "script_name": "baidu_search_cli.py",
  "script_args": ["extract", "https://example.com/article"]
}
```

| 参数 | 说明 |
|------|------|
| `url` | 网页 URL（位置参数），可直接传 search 返回的result中的百度跳转链接url |
| `--max-chars N` | 正文最大字符数，默认 20000，传 0 不截断 |
| `--client` | 同 search |

！！注意：
很多网站直接extract的http请求主url拿不到正文，例如有的是js动态渲染页面，
如果你当前有playwright的mcp工具，你使用浏览器来打开url， 禁止每次使用完后你主动关闭浏览器，你不需要关闭浏览器。

## 返回格式

stdout 输出 JSON，退出码 0 表示成功。

search 返回 `results` 数组，每条含 `title`/`url`/`abstract`/`date`/`site`/`is_advertisement`。`url` 是百度跳转链接（302 到目标页），需要真实 URL 或正文时对它调 `extract`。`site` 是来源站点（自然结果多数是真实域名如 `www.langchain.com`，少数是站点备案名如"腾讯云计算"；广告结果是广告主公司名）。`is_advertisement=true` 表示广告，应跳过。先读 `abstract` 和 `site` 判断相关性，只对确认需要的非广告链接调 `extract`。

extract 返回 `title`/`content`/`date`/`author`/`sitename`/`length`/`truncated`。`truncated=true` 表示正文已截断，需要更多内容时调大 `--max-chars` 重试。


## 出错应对

`search` 一次返回多条结果（默认 30 条），每条都带 `abstract`/`url`/`site`。先读 `abstract` 判断相关性，只对真正需要的那几条调 `extract`。
**某一条 `extract` 失败很正常，不要死磕单条 url** —— 先看 `site` 是否匹配 `references/` 里的站点策略（如知乎），命中就 `read_skill_resource` 加载对应文档按其步骤抓；没命中就换 search 结果里下一条相关 url 继续。只有所有相关链接都失败时，才向用户说明并退回用 `abstract` 摘要回答。


需要区分的错误类型：

- **HTTP 4xx/5xx**（如"HTTP 403 访问失败: https://真实url"）：404/410 说明页面已失效，直接换下一条；403 如果这条 url 确实关键，可换 `--client requests` 重试一次，否则也换下一条。
- **提取失败**（"提取失败: https://真实url（页面无正文）"）：页面是 JS 动态渲染或强反爬站，换下一条相关 url。
- **知乎等强反爬站**：`site` 命中知乎时不要 `extract`（100% 返回 403），直接 `read_skill_resource` 读 `zhihu-browser-access.md`，按其中的 playwright 步骤抓。
- **反爬拦截**（stderr 含"百度安全验证"）：这是全局拦截，换 url 也没用 —— 立即停止所有搜索/抓取，告知用户"搜索频率过高，稍后再试"。连续调用间隔 5 秒以上可预防。
- **依赖缺失**（ImportError）：告知用户安装对应包（`requests`/`beautifulsoup4`/`trafilatura`/`curl_cffi`）。

其他注意：

- `date` 字段百度不保证提供，缺失时如实说明，不编造发布时间。
- 广告结果已用 `is_advertisement=true` 标记（url 含 `baidu.php?url=`），优先采用 `is_advertisement=false` 的非广告来源。



## 关于 references 文件夹
把特定反扒或者http请求拿不到内容的网站的url，用户需要把相关提示词写到 references 文件夹下的对应文件中。 因为有些网站反扒，有些网站是需要ajax请求具体的接口拿到正文内容，所以很多网站直接 http协议去请求主url拿不到真正的详细正文内容。
