mcpField
D
duckducksearch

duckducksearch

github.com/xsailor511生产力0155 次安装34 周前更新
代码仓库

关于 duckducksearch

基于 Python `duckduckgo-search` 包的网页搜索技能,适用于需要多种媒体搜索结果的用户。支持文本、图片、视频和新闻查询及地区等筛选,也提供命令行用法。

主要功能

  1. 01文本、图片、视频和新闻搜索
  2. 02地区与查询筛选选项
  3. 03用于定向查询的搜索运算符
  4. 04代理配置支持
  5. 05通过命令行搜索并输出 CSV

适用场景

  1. 01查找研究主题相关网页
  2. 02按地区或颜色筛选图片
  3. 03按查询查找近期新闻或视频
  4. 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:catsURL 必须包含指定词语

代理支持

# 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"
}

最佳实践

  1. 使用上下文管理器以正确清理资源:

    with DDGS() as ddgs:
        results = ddgs.text("query")
    
  2. 设置合理的 max_results,避免等待时间过长

  3. 使用 region 参数获取本地化结果

  4. 实现重试逻辑以应对速率限制:

    import time
    
    for attempt in range(3):
        try:
            results = DDGS().text("query", max_results=10)
            break
        except RatelimitException:
            time.sleep(2 ** attempt)
    
  5. 使用代理进行大量搜索,避免 IP 被封锁

注意事项

  • 此库仅用于教育目的
  • 不适用于商业用途
  • 请遵守 DuckDuckGo 的服务条款
  • 此包已更名为 ddgs(较新版本请使用 pip install ddgs)

评论

支持 Markdown