我正在從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
提交
取消