如何在限制 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 并可以提供偏移量的主要内容,如果未能解决你的问题,请参考以下文章

如何修改PHP的memory_limit限制

如何在不定义任何限制的情况下在 python 中获取任意数量的输入?

php foreach循环大的数据量,在其执行1个多小时后就中断了?有可能是啥原因?

mysql查询所用时间过长 如何优化?

如何在 Jinja python 的 for 循环中添加变量

在运行时更改 Python for 循环范围(上限)