关于 duckducksearch
基于 Python `duckduckgo-search` 包的网页搜索技能,适用于需要多种媒体搜索结果的用户。支持文本、图片、视频和新闻查询及地区等筛选,也提供命令行用法。
主要功能
- 01文本、图片、视频和新闻搜索
- 02地区与查询筛选选项
- 03用于定向查询的搜索运算符
- 04代理配置支持
- 05通过命令行搜索并输出 CSV
适用场景
- 01查找研究主题相关网页
- 02按地区或颜色筛选图片
- 03按查询查找近期新闻或视频
- 04从命令行导出搜索结果为 CSV
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ xsailor511/ duckduck-web-search --skill duckducksearch安装后在 Claude Code 中输入/duckducksearch确认已加载。
附带文件README.md
详细介绍
DuckDuckGo 搜索技能
概述
此技能通过 duckduckgo-search Python 包,使用 DuckDuckGo 搜索引擎提供网页搜索功能。支持文本、图片、视频和新闻搜索,并提供多种筛选选项。
安装
pip install -U duckduckgo_search
核心功能
文本搜索
from duckduckgo_search import DDGS
# Basic text search
results = DDGS().text("python programming", max_results=10)
# Advanced text search with filters
results = DDGS().text(
keywords="python programming",
region="us-en", # Region: us-en, uk-en, cn-zh, etc.
safesearch="moderate", # on, moderate, off
timelimit="m", # d (day), w (week), m (month), y (year)
backend="auto", # auto, html, lite, bing
max_results=10
)
图片搜索
from duckduckgo_search import DDGS
results = DDGS().images(
keywords="butterfly",
region="wt-wt",
safesearch="off",
size=None, # Small, Medium, Large, Wallpaper
color="Monochrome", # Color filters
type_image=None, # photo, clipart, gif, transparent, line
layout=None, # Square, Tall, Wide
license_image=None, # any, Public, Share, ShareCommercially, Modify, ModifyCommercially
max_results=100
)
视频搜索
from duckduckgo_search import DDGS
results = DDGS().videos(
keywords="cars",
region="wt-wt",
safesearch="off",
timelimit="w",
resolution="high", # high, standard
duration="medium", # short, medium, long
license_videos=None, # creativeCommon, youtube
max_results=50
)
新闻搜索
from duckduckgo_search import DDGS
results = DDGS().news(
keywords="technology",
region="us-en",
safesearch="moderate",
timelimit="d", # d, w, m
max_results=20
)
可用地区
| 地区代码 | 描述 |
|---|---|
| wt-wt | 全球(无地区限制) |
| us-en | 美国 |
| uk-en | 英国 |
| cn-zh | 中国 |
| jp-jp | 日本 |
| kr-kr | 韩国 |
| de-de | 德国 |
| fr-fr | 法国 |
| in-en | 印度 |
| au-en | 澳大利亚 |
| ca-en | 加拿大 |
| br-pt | 巴西 |
| ru-ru | 俄罗斯 |
搜索运算符
使用 DuckDuckGo 搜索运算符进行高级查询:
| 运算符 | 示例 | 描述 |
|---|---|---|
| 精确匹配 | "cats and dogs" | 搜索精确短语 |
| 排除 | cats -dogs | 排除指定词语 |
| 必须包含 | cats +dogs | 要求包含指定词语 |
| 文件类型 | cats filetype:pdf | 搜索 PDF、文档等 |
| 网站 | dogs site:example.com | 搜索指定网站 |
| 排除网站 | cats -site:example.com | 排除指定网站 |
| 标题中 | intitle:dogs | 标题必须包含指定词语 |
| URL 中 | inurl:cats | URL 必须包含指定词语 |
代理支持
# Using Tor Browser
ddgs = DDGS(proxy="tb", timeout=20)
# Using custom proxy
ddgs = DDGS(proxy="socks5://user:password@host:port", timeout=20)
# Via environment variable
import os
os.environ["DDGS_PROXY"] = "socks5://user:password@host:port"
错误处理
from duckduckgo_search import DDGS
from duckduckgo_search.exceptions import (
DuckDuckGoSearchException,
RatelimitException,
TimeoutException,
ConversationLimitException,
)
try:
results = DDGS().text("query", max_results=10)
except RatelimitException:
print("Rate limit exceeded. Try using a proxy or waiting.")
except TimeoutException:
print("Request timed out.")
except DuckDuckGoSearchException as e:
print(f"Search error: {e}")
CLI 用法
# Text search
ddgs text -k "python tutorial"
# Search with region
ddgs text -k "news" -r cn-zh
# Search and save to CSV
ddgs text -k "research filetype:pdf" -m 50 -o results.csv
# Image search
ddgs images -k "landscape" -m 100 -d
# News search
ddgs news -k "technology" -m 50 -t d -o json
结果格式
文本搜索结果
{
"title": "Page Title",
"href": "https://example.com",
"body": "Page description..."
}
图片搜索结果
{
"title": "Image Title",
"image": "https://original-image-url.jpg",
"thumbnail": "https://thumbnail-url.jpg",
"url": "https://source-page.com",
"height": 3860,
"width": 4044,
"source": "Bing"
}
视频搜索结果
{
"content": "https://youtube.com/watch?v=...",
"title": "Video Title",
"description": "Video description...",
"duration": "8:22",
"provider": "YouTube",
"published": "2024-07-03"
}
新闻搜索结果
{
"date": "2024-07-03T16:25:22+00:00",
"title": "News Headline",
"body": "News article description...",
"url": "https://news-site.com/article",
"image": "https://image-url.jpg",
"source": "News Source Name"
}
最佳实践
-
使用上下文管理器以正确清理资源:
with DDGS() as ddgs: results = ddgs.text("query") -
设置合理的 max_results,避免等待时间过长
-
使用 region 参数获取本地化结果
-
实现重试逻辑以应对速率限制:
import time for attempt in range(3): try: results = DDGS().text("query", max_results=10) break except RatelimitException: time.sleep(2 ** attempt) -
使用代理进行大量搜索,避免 IP 被封锁
注意事项
- 此库仅用于教育目的
- 不适用于商业用途
- 请遵守 DuckDuckGo 的服务条款
- 此包已更名为
ddgs(较新版本请使用pip install ddgs)
评论
支持 Markdown