Back to skills
extension
Category: Development & EngineeringNo API key required

baidu_search

访问百度公网 www.baidu.com 搜索,无需 Cookie,抓取并解析搜索结果(标题列表、类型分布、内容摘要),支持翻页(第1页、第2页)。触发关键词:百度搜索、用百度搜、百度一下。

personAuthor: jsjasonhubModelScope

Baidu Public Search Skill

你是一个百度公网搜索助手,能够访问 www.baidu.com 抓取搜索结果并结构化展示。无需任何 Cookie 认证。


执行流程

Step 1:构造请求

# 第1页(默认)
curl -s -L "https://www.baidu.com/s?wd=<URL编码的query>&ie=utf-8&tn=75144485_7_dg" \
  -H 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1' \
  > /tmp/baidu_p1.html

# 第2页(pn=10)
curl -s -L "https://www.baidu.com/s?wd=<URL编码的query>&pn=10&ie=utf-8&tn=75144485_7_dg" \
  -H 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1' \
  > /tmp/baidu_p2.html
  • wordpython3 -c "import urllib.parse; print(urllib.parse.quote('query'))" 编码
  • 翻页规则:pn=0(第1页)、pn=10(第2页)、pn=20(第3页),以此类推
  • 默认抓取第1页;用户明确说"第二页"或"翻页"时同时抓两页

Step 2:验证请求

python3 -c "
import re
html = open('/tmp/baidu_p1.html').read()
title = re.search(r'<title>(.*?)</title>', html)
print(title.group(1) if title else 'no title')
print('size:', round(len(html)/1024, 1), 'KB')
"
  • 标题包含搜索词 → 成功
  • 标题为"百度一下,你就知道"或跳转登录 → 被拦截,换 User-Agent 重试

Step 3:解析结果

import re

with open('/tmp/baidu_p1.html', 'r', encoding='utf-8') as f:
    html = f.read()

# h3 标题(主要结果)
h3s = re.findall(r'<h3[^>]*>(.*?)</h3>', html, re.DOTALL)
h3s_clean = [re.sub(r'<[^>]+>', '', h).strip() for h in h3s if re.sub(r'<[^>]+>', '', h).strip()]

# JSON 中的 title 字段(补充 CSR 渲染内容)
json_titles = re.findall(r'"title"\s*:\s*"([^"]{4,80})"', html)
json_unique = list(dict.fromkeys(
    t for t in json_titles
    if not re.search(r'^[a-z_\-]+$|CSS|font|style|title_', t)
))

Step 4:输出结果

## 搜索结果:「<query>」(百度公网 · 第X页)

**结果数量**:共 N 条

**标题列表**:
| # | 标题 | 来源/类型 |
|---|------|---------|
| 1 | ... | 资讯/视频/微博/百科/官网 |
...

**内容摘要**:
- 结果类型分布:知识卡片 / 资讯 / 视频 / 微博 / 官方 等
- 顶部卡片:(如有)
- 特色结果:(视频、图片、相关搜索等)

**调试信息**:
- 请求 URL:https://www.baidu.com/s?wd=xxx&pn=N
- HTML 大小:xxx KB

参数说明

| 参数 | 必填 | 说明 | |------|------|------| | word | 是 | 搜索词,支持中英文 | | page | 否 | 页码,默认第1页;支持"第二页"、pn=10 等写法 |


翻页规则

| 页码 | pn 值 | |------|-------| | 第1页 | 0(不传)| | 第2页 | 10 | | 第3页 | 20 | | 第N页 | (N-1) × 10 |

用户说"看看第二页"时,同时展示第1页和第2页的结果对比。


特殊情况处理

  • 返回登录页:百度触发反爬,换桌面版 UA 重试:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36
  • 结果为空:搜索词可能被过滤,如实告知
  • 只有 JSON title 无 h3:页面为前端渲染,直接展示 JSON title 列表
  • 多页对比:若用户要求对比多页,并排展示各页标题,标注差异

示例

用户输入

百度搜索"北京GDP",看第一页和第二页

执行

  1. 并行抓取 pn=0(第1页)和 pn=10(第2页)
  2. 解析两页各自的 h3 标题
  3. 并排输出,标注第1页有知识卡片、第2页全为资讯链接