我正在从Polygon api 下载数据,在检查文档后,我意识到响应大小存在某种速率限制,每个请求将包含 5000 条记录。假设我需要下载几个月的数据,看起来没有一个单行解决方案可以一次性获取指定时间段内的所有数据。以下是我使用的 4 天数据点的响应requests.get('query').json():{ "ticker":"AAPL", "status":"OK", "queryCount":4, "resultsCount":4, "adjusted":True, "results":[ { "v":152050116.0, "vw":132.8458, "o":132.76, "c":134.18, "h":134.8, "l":130.53, "t":1598932800000, "n":1 }, { "v":200117202.0, "vw":131.6134, "o":137.59, "c":131.4, "h":137.98, "l":127, "t":1599019200000, "n":1 }, { "v":257589206.0, "vw":123.526, "o":126.91, "c":120.88, "h":128.84, "l":120.5, "t":1599105600000, "n":1 }, { "v":336546289.0, "vw":117.9427, "o":120.07, "c":120.96, "h":123.7, "l":110.89, "t":1599192000000, "n":1 } ], "request_id":"bf5f3d5baa930697621b97269f9ccaeb"}我认为最快的方法是按原样编写内容并稍后处理with open(out_file, 'a') as out: out.write(f'{response.json()["results"][0]}\n')稍后,在我下载所需的内容后,将读取该文件并使用 pandas 将数据转换为 json 文件:pd.DataFrame([eval(item) for item in open('out_file.txt')]).to_json('out_file.json')有没有更好的方法来实现同样的目标?如果有人熟悉 scrapy feed 导出,有没有一种方法可以在运行期间将数据转储到 json 文件而不将任何内容保存到内存中,我认为这与 scrapy 操作的方式相同。
1 回答

料青山看我应如是
TA贡献1772条经验 获得超8个赞
不要将内容写为文本,而是直接将其写为 JSON,而不是使用唯一的文件名(例如您的request_id)。
import json
# code for fetching data omitted.
data = response.json()
with open(out_file, 'w') as f:
json.dump(data, f)
然后你可以将它们全部加载到 Dataframes 中,
from pathlib import Path # Python 3.5+
import pandas as pd
dfs = []
for path in Path('dumped').rglob('*.json'):
tmp = pd.read_json(path)
dfs.append(tmp)
df = pd.concat(dfs, ignore_index=True)
添加回答
举报
0/150
提交
取消