我有一个人工智能助手项目,我希望它在互联网上搜索。我想使用适用于 Python 的 Google Quick Answer Box 或 DuckDuckGo Instant Answer API。我看到了其他问题,但它们对我没有多大帮助。这是我想要实现的一个示例:
问题:什么是长颈鹿?
Google 的答案:
DuckDuckGo 的答案:
如您所见,答案以
'The giraffe is非洲偶蹄类哺乳动物...'
如何使用 Python 获取此文本? (让我说“什么是长颈鹿”就是一个例子。我想使用这种方法几乎所有事情,比如“告诉我美国总统”等)
遗憾的是,Google 并不提供直接访问其快速解答框的公共 API。DuckDuckGo 之前提供过 Instant Answer API,但现已关闭以支持其更全面的 DuckDuckGo Search API。
使用 DuckDuckGo Search API
尽管不能直接获取格式化的“快速解答框”内容,但可以使用 DuckDuckGo Search API 获取搜索结果和相关信息。以下是如何使用 Python 完成此操作的方法:
import requests
def get_duckduckgo_answer(query):
"""使用 DuckDuckGo Search API 获取查询的答案。
Args:
query: 要搜索的查询字符串。
Returns:
包含答案的字符串,如果未找到答案,则返回 None。
"""
url = 'https://api.duckduckgo.com/'
params = {
'q': query,
'format': 'json'
}
response = requests.get(url, params=params)
data = response.json()
# 检查 Abstract 和 RelatedTopics 寻找答案
if data['Abstract']:
return data['Abstract']
elif data['RelatedTopics'] and 'Text' in data['RelatedTopics'][0]:
return data['RelatedTopics'][0]['Text']
else:
return None
# 示例用法
question = "什么是长颈鹿?"
answer = get_duckduckgo_answer(question)
if answer:
print(f"答案: {answer}")
else:
print("找不到答案。")
此代码将:
- 使用 DuckDuckGo Search API 发送查询。
- 以 JSON 格式解析响应。
- 在响应中查找“Abstract”字段(包含直接答案)。
- 如果未找到“Abstract”,则检查“RelatedTopics”以获取相关信息。
- 返回找到的答案或指示未找到答案的消息。
重要说明:
- 此方法不保证像 Google 的快速解答框那样提供格式化的答案,但它将尝试从 DuckDuckGo 检索最相关的信息。
- DuckDuckGo Search API 可能有使用限制,请查看其网站以获取详细信息。
- 对于更高级的用例和更好的控制,请考虑使用网络抓取库(例如 Beautiful Soup)来解析网页内容。但是,请务必遵守网站的服务条款,并在抓取网站数据时谨慎行事。