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

时间:2013-08-10 09:17:18

标签: python duckduckgo-api

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

import duckduckgo
r = duckduckgo.query('DuckDuckGo')
print r.results[0].url

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

[<duckduckgo.Result object at 0x0000000002E98F60>]

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

[]

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

1 个答案:

答案 0 :(得分:4)

那是documented behaviour。有不同的结果属性。

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

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

您的其他搜索返回消歧,结果位于r.related而不是r.results

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

编辑:python-duckduckgo使用的DuckDuckGo API没有为您提供所有搜索结果链接

  

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

     

但是,此API不包含我们的所有链接。就是这样   不是完整的搜索结果API或获取DuckDuckGo结果的方法   超出我们即时答案的应用程序。因为我们的方式   生成我们的搜索结果,遗憾的是我们没有权利   完全联合我们的结果。出于同样的原因,我们不能允许   在没有品牌的情况下构建我们的结果。请看我们的合作伙伴   页面了解有关指南和与我们联系的更多信息。

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