【发布时间】: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