Performs web searches using DuckDuckGo to retrieve real-time information from the internet. Use when the user needs to search for current events, documentation, tutorials, or any information that requ - DuckDuckGo Search - 使用 DuckDuckGo 实时网络搜索
v1.0.0通过 DuckDuckGo 搜索引擎获取实时网络信息,支持网页、新闻、图片、视频、即时答案等多种搜索类型,免 API Key,免费且注重用户隐私。
运行时依赖
安装命令
点击复制本土化适配说明
本技能可通过 uv 或 pip 安装。推荐使用国内镜像加速下载,pip 安装时使用 -i 参数指向 https://registry.npmmirror.com/simple,以获得更快的下载速度。
技能文档
这个技能通过 DuckDuckGo 搜索引擎实现网络搜索功能,帮助获取实时信息。
功能特性
- 🔍 基于 DuckDuckGo 的隐私友好型搜索
- 📰 支持新闻搜索
- 🖼️ 支持图片搜索
- 📹 支持视频搜索
- 🌐 无需 API Key,免费使用
- 🔒 保护隐私,不追踪用户
安装
使用 uv 安装(推荐)
uv pip install duckduckgo-search
或使用 pip 安装(国内镜像)
pip install -i https://registry.npmmirror.com/simple duckduckgo-search
快速开始
命令行方式
基础文本搜索
from duckduckgo_search import DDGS
with DDGS() as ddgs: results = list(ddgs.text('Python tutorial', max_results=5)) for r in results: print(f"标题: {r['title']}") print(f"链接: {r['href']}") print(f"摘要: {r['body']}") print('---')
搜索类型
1. 文本搜索
最常用的搜索方式,返回网页结果:from duckduckgo_search import DDGSquery = 'your search query'
with DDGS() as ddgs: results = list(ddgs.text( query, region='cn-zh', # 地区设置:cn-zh(中国), us-en(美国), wt-wt(全球) safesearch='moderate', # 安全搜索:on, moderate, off timelimit='m', # 时间范围:d(天), w(周), m(月), y(年), None(不限) max_results=10 # 最大结果数 )) for i, r in enumerate(results, 1): print(f"{i}. {r['title']}") print(f" URL: {r['href']}") print(f" 摘要: {r['body'][:100]}...") print()
2. 新闻搜索
搜索最新新闻:from duckduckgo_search import DDGS
with DDGS() as ddgs: results = list(ddgs.news( 'AI technology', region='wt-wt', safesearch='moderate', timelimit='d', # d=过去24小时, w=过去一周, m=过去一月 max_results=10 )) for r in results: print(f"📰 {r['title']}") print(f" 来源: {r['source']}") print(f" 时间: {r['date']}") print(f" 链接: {r['url']}") print()
3. 图片搜索
搜索图片资源:from duckduckgo_search import DDGS
with DDGS() as ddgs: results = list(ddgs.images( 'cute cats', region='wt-wt', safesearch='moderate', size='Medium', # Small, Medium, Large, Wallpaper type_image='photo', # photo, clipart, gif, transparent, line layout='Square', # Square, Tall, Wide max_results=10 )) for r in results: print(f"🖼️ {r['title']}") print(f" 图片: {r['image']}") print(f" 缩略图: {r['thumbnail']}") print(f" 来源: {r['source']}") print()
4. 视频搜索
搜索视频内容:from duckduckgo_search import DDGS
with DDGS() as ddgs: results = list(ddgs.videos( 'Python programming', region='wt-wt', safesearch='moderate', timelimit='w', # d, w, m resolution='high', # high, standard duration='medium', # short, medium, long max_results=10 )) for r in results: print(f"📹 {r['title']}") print(f" 时长: {r.get('duration', 'N/A')}") print(f" 来源: {r['publisher']}") print(f" 链接: {r['content']}") print()
5. 即时回答
获取 DuckDuckGo 的即时回答:from duckduckgo_search import DDGS
with DDGS() as ddgs: results = ddgs.answers('what is python programming language') for r in results: print(f"📚 {r['text']}") print(f" 来源: {r.get('url', 'DuckDuckGo')}")
6. 建议搜索
获取搜索建议:from duckduckgo_search import DDGS
with DDGS() as ddgs: suggestions = list(ddgs.suggestions('python')) print('🔍 搜索建议:') for s in suggestions: print(f" - {s['phrase']}")
7. 地图搜索
搜索地点信息:from duckduckgo_search import DDGS
with DDGS() as ddgs: results = list(ddgs.maps( 'coffee shop', place='Beijing, China', max_results=10 )) for r in results: print(f"📍 {r['title']}") print(f" 地址: {r['address']}") print(f" 电话: {r.get('phone', 'N/A')}") print(f" 坐标: {r['latitude']}, {r['longitude']}") print()
实用脚本
通用搜索函数
创建一个可复用的搜索脚本:from duckduckgo_search import DDGS import jsondef web_search(query, search_type='text', max_results=5, region='wt-wt', timelimit=None): ''' 执行 DuckDuckGo 搜索 参数: query: 搜索关键词 search_type: 搜索类型 (text, news, images, videos) max_results: 最大结果数 region: 地区 (cn-zh, us-en, wt-wt) timelimit: 时间限制 (d, w, m, y) ''' with DDGS() as ddgs: if search_type == 'text': results = list(ddgs.text(query, region=region, timelimit=timelimit, max_results=max_results)) elif search_type == 'news': results = list(ddgs.news(query, region=region, timelimit=timelimit, max_results=max_results)) elif search_type == 'images': results = list(ddgs.images(query, region=region, max_results=max_results)) elif search_type == 'videos': results = list(ddgs.videos(query, region=region, timelimit=timelimit, max_results=max_results)) else: results = [] return results
# 使用示例 query = 'Python 3.12 new features' results = web_search(query, search_type='text', max_results=5)
print(f'🔍 搜索: {query}') print(f'📊 找到 {len(results)} 个结果') print()
for i, r in enumerate(results, 1): print(f"{i}. {r['title']}") print(f" {r['href']}") print(f" {r['body'][:150]}...") print()
搜索并保存结果
from duckduckgo_search import DDGS import json from datetime import datetimequery = 'latest tech news' output_file = f'search_results_{datetime.now().strftime("%Y%m%d_%H%M%S")}.json'
with DDGS() as ddgs: results = list(ddgs.text(query, max_results=10))
# 保存到 JSON 文件 with open(output_file, 'w', encoding='utf-8') as f: json.dump({ 'query': query, 'timestamp': datetime.now().isoformat(), 'results': results }, f, ensure_ascii=False, indent=2)
print(f'✅ 搜索结果已保存到: {output_file}') print(f'📊 共 {len(results)} 条结果')
多关键词批量搜索
from duckduckgo_search import DDGS import timequeries = [ 'Python best practices 2024', 'React vs Vue 2024', 'AI development tools' ]
all_results = {}
with DDGS() as ddgs: for query in queries: print(f'🔍 搜索: {query}') results = list(ddgs.text(query, max_results=3)) all_results[query] = results print(f' 找到 {len(results)} 个结果') time.sleep(1) # 避免请求过快
print('\n' + '=' 50) print('📊 搜索汇总') print('=' 50 + '\n')
for query, results in all_results.items(): print(f'\n🔎 {query}:') for i, r in enumerate(results, 1): print(f" {i}. {r['title'][:60]}...")
参数说明
地区代码 (region)
| 代码 | 地区 |
|---|---|
| cn-zh | 中国 |
| us-en | 美国 |
| uk-en | 英国 |
| jp-jp | 日本 |
| kr-kr | 韩国 |
| wt-wt | 全球 (无地区限制) |
时间限制 (timelimit)
| 值 | 含义 |
|---|---|
| d | 过去 24 小时 |
| w | 过去一周 |
| m | 过去一月 |
| y | 过去一年 |
| None | 不限制 |
安全搜索 (safesearch)
| 值 | 含义 |
|---|---|
| on | 严格过滤 |
| moderate | 适度过滤 (默认) |
| off | 关闭过滤 |
错误处理
from duckduckgo_search import DDGS from duckduckgo_search.exceptions import DuckDuckGoSearchException
try: with DDGS() as ddgs: results = list(ddgs.text('test query', max_results=5)) print(f'✅ 搜索成功,找到 {len(results)} 个结果') except DuckDuckGoSearchException as e: print(f'❌ 搜索出错: {e}') except Exception as e: print(f'❌ 未知错误: {e}')
使用代理
如果需要使用代理:from duckduckgo_search import DDGS# 设置代理 proxy = 'http://127.0.0.1:7890' # 替换为你的代理地址
with DDGS(proxy=proxy) as ddgs: results = list(ddgs.text('test query', max_results=5)) print(f'通过代理搜索成功,找到 {len(results)} 条结果')
常见问题
安装失败?
# 确保 pip 是最新版本 pip install --upgrade pip pip install duckduckgo-search
# 或使用 uv uv pip install duckduckgo-search
搜索无结果?
- 检查网络连接
- 尝试使用代理
- 减少搜索关键词复杂度
- 检查地区设置是否正确
请求被限制?
# 在多次搜索之间添加延迟 import time time.sleep(1) # 等待 1 秒
# 减少单次请求的结果数量 max_results=5 # 而不是 50
与其他工具集成
结合browser-use 获取详细内容:
- 先用 DuckDuckGo 搜索
from duckduckgo_search import DDGS
with DDGS() as ddgs: results = list(ddgs.text('Python async tutorial', max_results=1)) if results: url = results[0]['href'] print(f'URL: {url}')
- 用
browser-use打开并获取详细内容
browser-use open
browser-use state
注意事项
⚠️ 使用建议:- 遵守使用频率限制:避免短时间内大量请求
- 合理设置结果数量:不要一次请求过多结果
- 添加适当延迟:批量搜索时在请求之间添加
time.sleep() - 处理异常情况:始终添加错误处理代码
- 尊重版权:搜索结果仅供参考,注意内容版权