您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

duckduckgo API未返回结果

duckduckgo API未返回结果

如果您访问DuckDuck Go API页面,则会发现有关使用API??的一些注意事项。第一个注释清楚地表明:

由于这是一个零点击的Info API,因此大多数深层查询(非主题名称)将为空白。

这是这些字段的列表:

Abstract: ""
AbstractText: ""
AbstractSource: ""
AbstractURL: ""
Image: ""
heading: ""
Answer: ""
Redirect: ""
AnswerType: ""
DeFinition: ""
DeFinitionSource: ""
DeFinitionURL: ""
RelatedTopics: [ ]
Results: [ ]
Type: ""

所以可能有些遗憾,但是他们的API只是截断了很多结果,而没有提供给您。可能会更快地工作,并且看起来除了使用DuckDuckGo.com之外什么都做不到。

因此,显然,在这种情况下,API并非可行之路。

对于我来说,我只剩下一种方法:从duckduckgo.com检索原始html并使用html5lib(例如,值得一提的是它们的html结构良好)进行解析。

还值得一提的是,解析html页面不是抓取数据的最可靠方法,因为html的结构可以更改,而API通常保持稳定直到公开宣布更改。

这是使用BeautifulSoup如何实现这种解析的示例:

from BeautifulSoup import BeautifulSoup
import urllib
import re

site = urllib.urlopen('http://duckduckgo.com/?q=example')
data = site.read()

parsed = BeautifulSoup(data)
topics = parsed.findAll('div', {'id': 'zero_click_topics'})[0]
results = topics.findAll('div', {'class': re.compile('results_*')})

print results[0].text

该脚本打印:

u'Eixample, an inner suburb of Barcelona with distinctive architecture'

在主页上直接查询的问题是它使用JavaScript产生所需的结果(而不是相关主题),因此您可以使用HTML版本仅获得结果。HTML版本具有不同的链接

让我们看看我们能得到什么:

site = urllib.urlopen('http://duckduckgo.com/html/?q=example')
data = site.read()
parsed = BeautifulSoup(data)

first_link = parsed.findAll('div', {'class': re.compile('links_main*')})[0].a['href']

存储在first_link变量中的结果是指向搜索引擎输出的第一个 结果 (不是 相关搜索 )的链接

http://www.iana.org/domains/example

获取所有链接,您可以遍历找到的标签(可以以类似方式接收链接以外的其他数据)

for i in parsed.findAll('div', {'class': re.compile('links_main*')}):
    print i.a['href']

http://www.iana.org/domains/example
https://twitter.com/example
https://www.facebook.com/leadingbyexample
http://www.trythisforexample.com/
http://www.myspace.com/leadingbyexample?_escaped_fragment_=
https://www.youtube.com/watch?v=CLXt3yh2g0s
https://en.wikipedia.org/wiki/Example_(musician)
http://www.merriam-webster.com/dictionary/example
...

请注意,纯HTML版本仅包含 results ,并且对于 相关搜索 您必须使用JavaScript版本。(html网址中没有此部分)。

Go 2022/1/1 18:50:46 有459人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶