如何在限制 LIMIT 的情况下循环 python API 并可以提供偏移量
Posted
技术标签:
【中文标题】如何在限制 LIMIT 的情况下循环 python API 并可以提供偏移量【英文标题】:how to loop in python API with restriction on LIMIT and can provide offset 【发布时间】:2022-01-21 11:10:00 【问题描述】:我是 python API 的新手。我需要帮助从 python 调用 API 数据,我们每页限制为 20000 行。是的,当然我们可以应用偏移量。但我正在寻找一个循环来提取完整的数据。下面是python脚本。抱歉,我是新手,没有太多编写脚本的经验。
querystring1 = "limit":"20000","month":"122021","offset":"20000","dateformat":"X"
querystring2 = "limit":"20000","month":"122021","offset":"40000","dateformat":"X"
querystring3 = "limit":"20000","month":"122021","offset":"60000","dateformat":"X"
response = requests.request("GET", BASE_URL, headers=headers, params=querystring)
response1 = requests.request("GET", BASE_URL, headers=headers, params=querystring1)
response2 = requests.request("GET", BASE_URL, headers=headers, params=querystring2)
response3 = requests.request("GET", BASE_URL, headers=headers, params=querystring3)
data = json.loads(response.text)
data1 = json.loads(response1.text)
data2 = json.loads(response2.text)
data3 = json.loads(response3.text)
db = pd.DataFrame(data)
db1 = pd.DataFrame(data1)
db2 = pd.DataFrame(data2)
db3 = pd.DataFrame(data3)
month = 'DEC2021_UAE'
csvdata = db.to_csv(month+'_1.csv',index=True,encoding="utf-8")
csvdata1 = db1.to_csv(month+'_2.csv',index=False,encoding="utf-8")
csvdata2 = db2.to_csv(month+'_3.csv',index=False,encoding="utf-8")
csvdata3 = db3.to_csv(month+'_4.csv',index=False,encoding="utf-8")```
at the end I have 4 different csv files however I want to able to loop through the API and should extract the data in file rather then 4 files.
Any Help Please...
【问题讨论】:
【参考方案1】:遍历您的 offset
,进行 API 调用并存储数据,然后使用 pd.concat
在一个操作中组合 DataFrame。
offsets = ["20000", "40000", "60000"]
api_data = []
for offset in offsets:
qs = "limit":"20000","month":"122021","offset":offset,"dateformat":"X"
response = requests.request("GET", BASE_URL, headers=headers, params=qs)
data = resp.json()
api_data.append(data)
month = 'DEC2021_UAE'
csv_data = pd.concat((pd.DataFrame(data) for data in api_data), ignore_index=True)
csv_data.to_csv(month)
【讨论】:
嗨@gold_cy ...我尝试了上面的脚本。它只下载了 30,000 行重复的行,当删除重复的行时,它会下载 10,000 行。本月我们有大约 50,000 行。不知道为什么会这样 重复不是因为代码,而是你在第一次尝试中显示的任何逻辑。我只是将您的代码更改为循环运行。以上是关于如何在限制 LIMIT 的情况下循环 python API 并可以提供偏移量的主要内容,如果未能解决你的问题,请参考以下文章
如何在不定义任何限制的情况下在 python 中获取任意数量的输入?
php foreach循环大的数据量,在其执行1个多小时后就中断了?有可能是啥原因?