OpenClaw 网络搜索与信息采集完全指南
网络搜索是 AI 助理获取外部信息的核心能力。OpenClaw 提供 web_search 和 web_fetch 两个工具,支持搜索互联网和抓取网页内容。本文详细介绍如何高效使用这些工具进行信息采集。
一、工具概述
web_search - 搜索引擎
基于 Brave Search API,支持:
- 关键词搜索
- 区域和语言过滤
- 时间范围筛选
- 结果数量控制
web_fetch - 网页抓取
提取网页可读内容:
- HTML 转 Markdown
- 去除广告和导航
- 提取正文内容
- 支持长文本截断
二、基本用法
web_search 参数说明
javascript
web_search(
query="OpenClaw 教程", // 搜索关键词(必填)
count=10, // 结果数量(1-10,默认 10)
country="US", // 国家代码(默认 US,ALL 为全球)
language="en", // 语言代码(默认 en)
freshness="week", // 时间范围:day/week/month/year
ui_lang="zh-CN", // UI 语言(包含地区)
search_lang="zh-hans" // 搜索语言
)web_fetch 参数说明
javascript
web_fetch(
url="https://example.com/article", // 网址(必填)
extractMode="markdown", // 提取模式:markdown/text
maxChars=5000 // 最大字符数(默认 5000)
)三、实战案例 1:竞品分析报告
场景说明
定期监控竞争对手的产品动态、价格变化、市场活动。
完整实现
javascript
// 1. 搜索竞品信息
competitor_news = web_search(
query="竞争对手公司名 新产品 发布 2026",
count=10,
freshness="week",
country="CN",
language="zh"
)
// 2. 搜索行业报告
industry_report = web_search(
query="人工智能行业分析报告 2026",
count=5,
freshness="month"
)
// 3. 抓取详细页面内容
detailed_info = []
for (const result of competitor_news) {
content = web_fetch(
url=result.url,
extractMode="markdown",
maxChars=3000
)
detailed_info.push({
title: result.title,
url: result.url,
content: content
})
}
// 4. 生成竞品分析报告
report = `
# 竞品分析报告 - ${new Date().toLocaleDateString('zh-CN')}
## 最新动态
${competitor_news.map((item, i) => `
### ${i+1}. ${item.title}
- 来源:${item.source}
- 时间:${item.published || "未知"}
- 摘要:${item.snippet}
- 链接:${item.url}
`).join('\n')}
## 详细内容分析
${detailed_info.map(item => `
#### ${item.title}
${item.content.substring(0, 500)}...
`).join('\n')}
## 关键发现
1. **产品动态**:[总结竞争对手产品更新]
2. **价格策略**:[分析价格变化]
3. **市场活动**:[总结营销活动]
4. **用户反馈**:[收集用户评价]
## 建议行动
- [ ] 针对竞品新功能,评估是否需要跟进
- [ ] 调整定价策略保持竞争力
- [ ] 加强差异化优势宣传
- [ ] 监控用户反馈,及时响应
`
// 5. 保存报告
write(
path="./reports/competitor-analysis-${Date.now()}.md",
content=report
)
// 6. 发送到工作群
message(
action="send",
channel="feishu",
target="chat_product_team",
message="📊 新一期竞品分析报告已生成,请查看附件",
media=`./reports/competitor-analysis-${Date.now()}.md`
)报告示例输出
# 竞品分析报告 - 2026/3/19
## 最新动态
### 1. 某公司发布新一代 AI 助理产品
- 来源:科技日报
- 时间:2026-03-18
- 摘要:该公司今日发布了新一代 AI 助理产品,号称性能提升 50%...
- 链接:https://example.com/news/123
### 2. 竞品宣布降价 30%
- 来源:36 氪
- 时间:2026-03-17
- 摘要:为应对市场竞争,该公司宣布全线产品降价 30%...
- 链接:https://example.com/news/456
## 关键发现
1. **产品动态**:竞争对手推出新功能,支持多模态交互
2. **价格策略**:降价 30%,可能引发价格战
3. **市场活动**:加大广告投放,重点投放科技媒体
4. **用户反馈**:新功能好评率高,但价格敏感用户增加
## 建议行动
- [ ] 评估多模态功能开发优先级
- [ ] 制定应对价格战的策略
- [ ] 加强差异化优势宣传
- [ ] 监控用户流失情况四、实战案例 2:技术趋势调研
场景说明
为技术选型做调研,收集最新技术方案、社区评价、使用案例。
完整实现
javascript
// 调研主题
const topics = [
"AI Agent 框架对比 2026",
"LangChain vs AutoGen vs OpenClaw",
"多 Agent 系统最佳实践"
]
// 1. 多维度搜索
async function research_topic(topic) {
// 搜索技术博客
blogs = web_search(
query=`${topic} 技术博客 深度分析`,
count=5,
freshness="month"
)
// 搜索官方文档
docs = web_search(
query=`${topic} site:github.com OR site:readthedocs.io`,
count=3
)
// 搜索社区讨论
discussions = web_search(
query=`${topic} reddit OR stackoverflow OR hackernews`,
count=5
)
// 搜索视频教程
videos = web_search(
query=`${topic} tutorial video`,
count=3
)
return { blogs, docs, discussions, videos }
}
// 2. 执行调研
results = {}
for (const topic of topics) {
results[topic] = await research_topic(topic)
}
// 3. 抓取关键内容
key_insights = []
for (const [topic, data] of Object.entries(results)) {
// 抓取高赞博客
for (const blog of data.blogs.slice(0, 2)) {
content = web_fetch(url=blog.url, maxChars=2000)
key_insights.push({
topic,
source: blog.title,
type: "博客",
content
})
}
// 抓取文档
for (const doc of data.docs.slice(0, 1)) {
content = web_fetch(url=doc.url, maxChars=2000)
key_insights.push({
topic,
source: doc.title,
type: "文档",
content
})
}
}
// 4. 生成调研报告
report = `
# 技术调研报告 - AI Agent 框架
## 调研背景
为 [项目名称] 选择合适的 AI Agent 框架,调研了主流方案。
## 调研维度
- 技术博客和深度分析
- 官方文档完整性
- 社区活跃度和评价
- 学习资源丰富度
## 核心发现
${key_insights.map((insight, i) => `
### ${i+1}. ${insight.source} (${insight.type})
**主题**: ${insight.topic}
**关键内容**:
${insight.content.split('\n').slice(0, 10).join('\n')}
...
`).join('\n')}
## 方案对比
| 框架 | 优势 | 劣势 | 适用场景 |
|------|------|------|---------|
| LangChain | 生态丰富,插件多 | 学习曲线陡峭 | 复杂应用 |
| AutoGen | 多 Agent 协作强 | 文档较少 | 研究项目 |
| OpenClaw | 轻量易用,中文友好 | 生态较小 | 快速原型 |
## 推荐方案
**推荐**: OpenClaw
**理由**:
1. 学习成本低,团队可快速上手
2. 中文文档完善,沟通无障碍
3. 功能满足当前需求
4. 活跃的社区支持
## 参考资料
${[...results.blogs, ...results.docs].map(r => `- [${r.title}](${r.url})`).join('\n')}
`
write(path="./tech-research-ai-agent-framework.md", content=report)五、实战案例 3:舆情监控系统
场景说明
监控品牌、产品、关键词的网络舆情,及时发现负面信息。
完整实现
javascript
// 监控关键词列表
const keywords = [
"我们公司名",
"我们产品名",
"品牌名 + 投诉",
"品牌名 + 问题",
"品牌名 + 故障"
]
// 1. 执行监控
async function sentiment_monitoring() {
const mentions = []
for (const keyword of keywords) {
// 搜索最近提及
results = web_search(
query=keyword,
count=10,
freshness="day", // 只监控 24 小时内
country="CN"
)
for (const result of results) {
// 抓取内容分析情感
content = web_fetch(url=result.url, maxChars=1000)
// 简单情感分析(实际可使用 NLP 模型)
sentiment = analyze_sentiment(content)
mentions.push({
keyword,
title: result.title,
url: result.url,
source: result.source,
published: result.published,
content,
sentiment, // positive/neutral/negative
timestamp: Date.now()
})
}
}
return mentions
}
// 2. 情感分析函数
function analyze_sentiment(text) {
// 简单关键词匹配(实际应使用 ML 模型)
const negative_words = ["差", "糟糕", "投诉", "问题", "故障", "垃圾", "失望"]
const positive_words = ["好", "优秀", "推荐", "满意", "喜欢", "棒"]
let score = 0
negative_words.forEach(w => { if (text.includes(w)) score-- })
positive_words.forEach(w => { if (text.includes(w)) score++ })
if (score < -2) return "negative"
if (score > 2) return "positive"
return "neutral"
}
// 3. 生成舆情报告
async function generate_sentiment_report() {
const mentions = await sentiment_monitoring()
// 统计
const stats = {
total: mentions.length,
positive: mentions.filter(m => m.sentiment === "positive").length,
neutral: mentions.filter(m => m.sentiment === "neutral").length,
negative: mentions.filter(m => m.sentiment === "negative").length
}
// 负面信息(需要立即处理)
const negatives = mentions.filter(m => m.sentiment === "negative")
// 生成报告
const report = `
# 舆情监控日报 - ${new Date().toLocaleDateString('zh-CN')}
## 总体统计
- 总提及数:${stats.total}
- 正面:${stats.positive} (${(stats.positive/stats.total*100).toFixed(1)}%)
- 中性:${stats.neutral} (${(stats.neutral/stats.total*100).toFixed(1)}%)
- 负面:${stats.negative} (${(stats.negative/stats.total*100).toFixed(1)}%)
## 负面信息(需立即处理)
${negatives.map(m => `
### ⚠️ ${m.title}
- 来源:${m.source}
- 时间:${m.published || "未知"}
- 关键词:${m.keyword}
- 链接:${m.url}
- 内容摘要:${m.content.substring(0, 200)}...
`).join('\n')}
## 正面评价(可用于宣传)
${mentions.filter(m => m.sentiment === "positive").slice(0, 5).map(m => `
### 👍 ${m.title}
- 来源:${m.source}
- 链接:${m.url}
`).join('\n')}
## 建议行动
${negatives.length > 0 ? `
1. **立即响应**:针对${negatives.length}条负面信息,安排客服跟进
2. **问题排查**:如是产品问题,通知技术团队
3. **公开回应**:必要时发布官方声明
` : `
1. 继续保持良好服务
2. 收集正面评价用于宣传
`}
`
return { report, stats, mentions }
}
// 4. 发送报告
const { report, stats } = await generate_sentiment_report()
// 有负面信息时立即告警
if (stats.negative > 0) {
message(
action="send",
channel="feishu",
target="chat_pr_team",
message=`⚠️ 发现${stats.negative}条负面舆情,请立即处理!\n\n${report}`
)
} else {
// 无负面时静默记录
write(
path=`./sentiment-reports/${Date.now()}.md`,
content=report
)
}六、高级技巧
1. 精确搜索
javascript
// 搜索特定网站
web_search(query="OpenClaw site:github.com")
// 搜索特定文件类型
web_search(query="AI 报告 filetype:pdf")
// 排除某些结果
web_search(query="OpenClaw -广告 -推广")
// 搜索标题包含关键词
web_search(query="intitle:OpenClaw 教程")
// 搜索正文包含关键词
web_search(query="inbody:AI Agent 实战")2. 批量抓取
javascript
// 批量抓取搜索结果
async function batch_fetch(search_results, max_pages=10) {
const contents = []
for (let i = 0; i < Math.min(search_results.length, max_pages); i++) {
try {
const content = web_fetch(
url=search_results[i].url,
extractMode="markdown",
maxChars=3000
)
contents.push({
url: search_results[i].url,
title: search_results[i].title,
content
})
// 避免请求过快
if (i < max_pages - 1) {
exec(command="sleep 1") // 延迟 1 秒
}
} catch (e) {
console.log(`抓取失败 ${search_results[i].url}: ${e.message}`)
}
}
return contents
}3. 内容去重
javascript
// 使用 SimHash 去重
function deduplicate_contents(contents, threshold=0.9) {
const unique = []
for (const content of contents) {
const hash = compute_simhash(content.content)
const is_duplicate = unique.some(u => {
const similarity = compare_simhash(hash, u.hash)
return similarity > threshold
})
if (!is_duplicate) {
unique.push({ ...content, hash })
}
}
return unique
}4. 定时监控
javascript
// 配置每小时监控
cron(
action="add",
job={
name: "舆情监控",
schedule: {
kind: "cron",
expr: "0 * * * *", // 每小时
tz: "Asia/Shanghai"
},
payload: {
kind: "agentTurn",
message: "执行舆情监控流程",
timeoutSeconds: 600
},
sessionTarget: "isolated"
}
)七、最佳实践
1. 搜索词优化
javascript
// ❌ 模糊的搜索词
web_search(query="AI")
// ✅ 具体的搜索词
web_search(query="AI Agent 框架对比 2026 实战教程")
// ✅ 使用引号精确匹配
web_search(query="\"OpenClaw\" \"多 Agent 系统\"")
// ✅ 组合搜索
web_search(query="AI + Agent + 教程 -广告")2. 请求频率控制
javascript
// 避免被封 IP
const last_request = {}
function rate_limited_fetch(url, min_interval=2000) {
const domain = new URL(url).hostname
const now = Date.now()
const last = last_request[domain] || 0
if (now - last < min_interval) {
exec(command=`sleep ${(min_interval - (now - last)) / 1000}`)
}
const result = web_fetch(url=url)
last_request[domain] = Date.now()
return result
}3. 错误处理
javascript
try {
content = web_fetch(url="https://example.com")
} catch (e) {
// 记录失败
write(
path="./logs/fetch-errors.log",
content=`${new Date().toISOString()} ${url} ${e.message}\n`
)
// 尝试备用方案
if (e.message.includes("404")) {
// 尝试 Wayback Machine
content = web_fetch(url=`https://web.archive.org/web/${url}`)
}
}4. 内容缓存
javascript
// 缓存抓取结果,避免重复请求
const cache = new Map()
function cached_fetch(url, ttl=3600000) { // 默认缓存 1 小时
const cached = cache.get(url)
if (cached && Date.now() - cached.timestamp < ttl) {
return cached.content
}
const content = web_fetch(url=url)
cache.set(url, { content, timestamp: Date.now() })
return content
}八、常见问题
Q: 搜索结果不准确怎么办?
A:
- 优化搜索词,使用更具体的关键词
- 使用高级搜索语法(site:, filetype:, intitle:)
- 调整区域和语言设置
- 限制时间范围获取最新结果
Q: 网页抓取失败怎么办?
A:
- 检查 URL 是否正确
- 尝试 text 模式而非 markdown
- 检查是否需要登录
- 网站可能有反爬措施,添加延迟
Q: 如何抓取需要登录的页面?
A:
- 使用 browser 工具模拟登录
- 或使用 API(如果有)
- 或手动导出内容后分析
Q: 搜索和抓取的法律风险?
A:
- 遵守 robots.txt
- 控制请求频率,不要影响目标网站
- 不抓取受版权保护的内容用于商业目的
- 遵守数据保护法规(如 GDPR)
九、总结
网络搜索和信息采集是 AI 助理的"眼睛"和"耳朵":
| 工具 | 用途 | 特点 |
|---|---|---|
| web_search | 搜索互联网 | 快速、全面、可过滤 |
| web_fetch | 抓取网页 | 提取正文、去广告 |
掌握这些技巧,你的 AI 助理可以:
- 实时监控行业动态
- 快速完成技术调研
- 及时发现舆情风险
- 自动收集竞争情报
记住:信息的质量取决于搜索的技巧和抓取的策略。
相关资源: