首页 > 编程问答 >如何使用 Python 在 Google 或 DuckDuckGo 中快速获取答案

如何使用 Python 在 Google 或 DuckDuckGo 中快速获取答案

时间:2024-08-04 16:19:32浏览次数:15  
标签:python python-3.x web-scraping google-api duckduckgo

我有一个人工智能助手项目,我希望它在互联网上搜索。我想使用适用于 Python 的 Google Quick Answer Box 或 DuckDuckGo Instant Answer API。我看到了其他问题,但它们对我没有多大帮助。这是我想要实现的一个示例:

问题:什么是长颈鹿?

Google 的答案:

enter image description here

DuckDuckGo 的答案:

enter image description here

如您所见,答案以

'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("找不到答案。")

此代码将:

  1. 使用 DuckDuckGo Search API 发送查询。
  2. 以 JSON 格式解析响应。
  3. 在响应中查找“Abstract”字段(包含直接答案)。
  4. 如果未找到“Abstract”,则检查“RelatedTopics”以获取相关信息。
  5. 返回找到的答案或指示未找到答案的消息。

重要说明:

  • 此方法不保证像 Google 的快速解答框那样提供格式化的答案,但它将尝试从 DuckDuckGo 检索最相关的信息。
  • DuckDuckGo Search API 可能有使用限制,请查看其网站以获取详细信息。
  • 对于更高级的用例和更好的控制,请考虑使用网络抓取库(例如 Beautiful Soup)来解析网页内容。但是,请务必遵守网站的服务条款,并在抓取网站数据时谨慎行事。

标签:python,python-3.x,web-scraping,google-api,duckduckgo
From: 62448588

相关文章

  • 如何为可以在递归调用中重新分配的 python 函数制定类型提示?
    采取以下最小示例:S=TypeVar("S",bound=int|str)defmeth(a:S)->S:ifa=="5":returnstr(meth(int(a)))returna特别是,上面的方法可以采用字符串或整数。它总是返回与其输入相同类型的值,但它可以递归地调用自身,在这种情况下,S的值......
  • 使用 python 和 json 抓取该网站的正确 URL 是什么?
    试图抓取这个网站-->https://ucr.gov/enforcement/1000511它曾经使用下面的代码,然后停止了。无法获取响应中的json或任何内容。query="1000511"url='https://ucr.gov/api/enforcement/{}'.format(query)headers={'User-Agent':'Mozilla/5.0(......
  • Python逆向
    参考链接:https://www.bilibili.com/video/BV1JL4y1p7Tt/?spm_id_from=333.999.0.0https://bbs.kanxue.com/thread-282542.htmhttps://blog.csdn.net/weixin_35967330/article/details/114390031?spm=1001.2014.3001.5501https://0xd13a.github.io/ctfs/0ctf2017/py/前言:py......
  • Python中使用正则表达式
    摘要:正则表达式,又称为规则表达式,它不是某种编程语言所特有的,而是计算机科学的一个概念,通常被用来检索和替换某些规则的文本。一.正则表达式的语法①行定位符行定位符就是用来描述字符串的边界。"^"表示行的开始,"$"表示行的结束。^tm  #tmequalTomorrowMoon可以......
  • 如何在python中使用xarray打开grib2文件?
    将xarray导入为xr导入cfgrib导入生态码将pandas导入为pddata=xr.open_dataset(r"C:\Users\new\forecast_data.grib2",engine="cfgrib")这是我的代码。我只想使用xarray读取这个文件。错误是:无法识别的引擎cfgrib必须是以下之一:['netcdf4'、'scipy'、'......
  • 如何在 java 或 python 中使用 HTTP(S) 解决无法解析的主机名或无法识别的名称错误?
    我尝试以编程方式访问网站的信息,但在Java和Python上都无法解析主机名。如果我指定IP地址,则会将错误更改为TLSV1_UNRECOGNIZED_NAME。不过,这个网站无需任何额外的工作就可以通过任何浏览器解决。我在这里浏览了很多潜在的解决方案,但对于Python,它说这个问题应该在2.7......
  • Python 请求 POST 请求与 websockets 库一起使用时挂起
    我使用Python中的requests库发送POST请求,同时维护与websockets库的WebSocket连接:importasyncioimportrequestsimportwebsocketsasyncdefwebsocket_handler(uri):asyncwithwebsockets.connect(uri)aswebsocket:whileTrue:me......
  • 在Python中,list1[::] = list2的空间复杂度是多少?
    此代码首先迭代列表nums,更新整数0、1、2(也分别称为红色、白色和蓝色)的计数。nums保证只有整数0、1和/或2。找到计数后,代码使用[::],这是一种就地修改列表的技巧,以排序numsdefsortColors(self,nums:List[int])->None:re......
  • [附开题]flask框架高校资产管理系统d8y3s(源码+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育事业的快速发展,高校资产规模日益庞大,种类繁多,管理难度显著增加。传统的资产管理方式往往依赖于手工记录和纸质档案,不仅效率低......
  • [附开题]flask框架贺州图特产管理系统uuy79(源码+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景贺州,这座历史悠久、文化底蕴深厚的城市,以其丰富的自然资源和独特的地理位置孕育了众多令人瞩目的特产。然而,在信息化快速发展的今天,贺州特......