【问题标题】:Python 3.5.2 Iterating a get requestPython 3.5.2 迭代获取请求
【发布时间】:2017-05-08 16:29:27
【问题描述】:

希望有人能告诉我这个脚本是否按照我的预期运行,如果没有,请解释我做错了什么。

我使用的 RESTful API 的参数 pageSize 范围为 10-50。我使用 pageSize=50。还有一个我没有使用的参数叫做 pageNumber

所以,我认为这是发出 get 请求的正确方法:

# Python 3.5.2
import requests

r = requests.get(url, stream=True)
with open("file.txt",'w', newline='', encoding='utf-8') as fd:
    text_out = r.text        
    fd.write(text_out)

更新
我想我明白了一点。我更详细地阅读了文档,但我仍然想念如何从 API 获取整个数据集。以下是更多信息:

verbs = requests.options(r.url)
print(verbs.headers)
{'Server': 'ninx', 'Date': 'Sat, 24 Dec 2016 22:50:13 GMT',
'Allow': 'OPTIONS,HEAD,GET', 'Content-Length': '0', 'Connection': 'keep-alive'}
print(r.headers)
{'Transfer-Encoding': 'chunked', 'Vary': 'Accept-Encoding',
'X-Entity-Count': '50', 'Connection': 'keep-alive', 
'Content-Encoding': 'gzip', 'Date': 'Sat, 24 Dec 2016 23:59:07 GMT', 
'Server': 'ninx', 'Content-Type': 'application/json; charset=UTF-8'}

我是否应该创建一个会话并使用之前未使用的 pageNumber 参数创建一个新的 url,直到“X-Entity-Count”为零?或者,有没有更好的方法?

【问题讨论】:

  • chunkSize 纯粹是关于您一次从响应中读取的原始字节数。它与 api 返回给您的任何更高级别的部分(页面、对象等)无关。
  • 谢谢,这是否意味着我应该删除chuck_size=50 并且请求应该正确地遍历多个页面?
  • 没有块大小,您只需将响应的全部内容读入内存并将其写入文件。使用 cunksize,您一次可以执行 50 个字节。这些都与页面无关。尚不清楚您为什么要关心这些页面,因为无论如何您都将整个内容写入文件。
  • 我期待更多结果,JSON 的前几行有一个“计数”:25595。
  • 对。您假设 chunksize 在某种程度上与 JSON 或请求返回的任何其他实体相关。它不是。这就是它的全部。如果您想迭代 JSON 结构中的内容,您应该解析 JSON - requests 库中有用于此的方法,请查看文档。您当前的实现基本上是查看原始字节包。它不知道 JSON 或 Adam 的页面。

标签: python-3.x python-requests


【解决方案1】:

我发现了一个有助于为我解决这个问题的讨论......这个更新的问题可能应该被删除...... API pagination best practices

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2014-09-25
    • 1970-01-01
    • 2017-01-20
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多