DuckDuckGo 搜索返回“列表索引超出范围”

use*_*758 5 python duckduckgo-api

这是我的 Duck Duck Go 搜索脚本。

import duckduckgo
r = duckduckgo.query('DuckDuckGo')
print r.results[0].url
Run Code Online (Sandbox Code Playgroud)

它回来了;列表索引超出范围。如果我打印 r.results 我得到;

[<duckduckgo.Result object at 0x0000000002E98F60>]
Run Code Online (Sandbox Code Playgroud)

但是,如果我搜索“DuckDuckGo”以外的任何内容。它返回一个空值

[]
Run Code Online (Sandbox Code Playgroud)

我完全按照他们在示例代码中所做的。 https://github.com/mikejs/python-duckduckgo

lec*_*tif 4

这是有记录的行为。有不同的结果属性。

您的第一个查询返回结果列表。

r = duckduckgo.query('DuckDuckGo')
if r.type == 'answer':
    print r.results    # [<duckduckgo.Result object>]
Run Code Online (Sandbox Code Playgroud)

您的其他搜索返回了消歧义,并且您的结果r.related不在r.results

r = duckduckgo.query('Python')
if r.type == 'disambiguation':
    print r.related    # [<duckduckgo.Result object>]
Run Code Online (Sandbox Code Playgroud)

编辑:python-duckduckgo 使用DuckDuckGo API,它不会为您提供所有搜索结果链接

我们的即时答案 API 让您可以免费访问我们的许多即时答案,例如:主题摘要(API 示例)、类别(API 示例)、消歧(API 示例)、!bang 重定向(API 示例)和定义(API 示例)。

但是,此 API 并不包含我们的所有链接。也就是说,它不是一个完整的搜索结果 API,也不是一种将 DuckDuckGo 结果放入您的应用程序(超出我们的即时答案)的方法。不幸的是,由于我们生成搜索结果的方式,我们无权完全联合我们的结果。出于同样的原因,我们不能允许在没有品牌的情况下构建我们的结果。请参阅我们的合作伙伴页面,了解有关指南和与我们联系的更多信息。

您无法使用 DuckDuckGo API 执行您想做的操作,但 Stackoverflow 上已发布了可能的解决方法:https ://stackoverflow.com/a/11923803/241866