【问题标题】:How to collect all results from a web API in Python?如何从 Python 中的 Web API 收集所有结果?
【发布时间】:2019-04-15 20:13:29
【问题描述】:

我正在使用 Python 脚本从 Web API 收集数据。 Web API 最多提供 50 个结果 ("size":50)。但是,我需要收集所有结果。请让我知道我该怎么做。我的初始代码在下面可用。先感谢您。

def getData():
    headers = {
    'Content-type': 'application/json',
    }

    data = '{"size":50,"sites.recruitment_status":"ACTIVE", "sites.org_state_or_province":"VA"}'
    response = requests.post('https://clinicaltrialsapi.cancer.gov/v1/clinical-trials', headers=headers, data=data)

    print(response.json())

【问题讨论】:

  • 美国农业部 API 也发生了同样的事情。最后,我最终制作了一个包含 50 个项目的查询字符串列表,然后循环遍历它们,一次获得 50 个结果集。你能分享更多你的代码吗?它似乎不完整。
  • 为什么你用两个不兼容的python版本来标记这个?如果我们不知道 API 更新的频率,我们怎么能希望打败结果分页呢?您是否阅读了您正在使用的特定 API 的文档?
  • 你坚持哪一部分?我认为您只需一次获取一页结果并将它们保存到集合中。哪一部分你不知道怎么做?

标签: python python-3.x python-2.7 python-requests python-responses


【解决方案1】:

要添加到已经给出的答案,您可以从初始 json 中获得总结果。然后,您可以使用循环来增加批次

import requests
import json

url = "https://clinicaltrialsapi.cancer.gov/v1/clinical-trials"
r = requests.get(url).json()
num_results = int(r['total'])
results_per_request = 50
total = 0
while total < num_results:
    total+=results_per_request
    print(total)

【讨论】:

    【解决方案2】:

    一切都在文档中:

    https://clinicaltrialsapi.cancer.gov/#!/Clinical45trials/searchTrialsByGet

    获取临床试验

    根据提供的过滤器参数过滤所有临床试验。筛选 params 可以是模式中的任何字段以及任何 以下参数...

    size:限制提供的结果数量(默认为10, 最大值为 50)

    from:从提供的起点开始结果(默认为 0)

    ...

    所以你只需要指定一个“from”值,然后将它增加 50 到 50。

    【讨论】:

    • 谢谢。如何找到结果的结尾?
    • 当你查询 API 时,有时你会得到少于 50 个结果,这意味着它已经结束了。
    猜你喜欢
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 2019-12-20
    • 2013-10-08
    • 2021-08-23
    相关资源
    最近更新 更多