我想使用的API限制对10个项目的请求。我想下载100个项目。我正在尝试编写一个生成10 API的函数,使用它们的偏移功能使其成为可能。我认为循环是正确的方法。
这是我的代码,但它不起作用,我不明白为什么:
import pandas as pd
import requests
api_key = 'THIS_IS_MY_KEY'
api_url = 'http://apiurl.com/doc?limit=10' # fake url
headers = {'Authorization': 'Bearer ' + api_key}
for x in range(0, 10):
number = 0
url = api_url + '&offset=' + str(number + 10)
r = requests.get(url, headers=headers)
x = pd.DataFrame(r.json())
x = x['data'].apply(pd.Series)
return x
答案 0 :(得分:1)
您还使用x作为循环计数器和数据框 - 我认为这不是一个好习惯 - 尽管您的代码可能仍然有效,因为for循环的工作方式。更好的是在范围调用中使用step参数 - 如下所示。还不清楚你期望返回什么 - 你想要返回你提取的最后一个偏移 - 或数据框(因为你的代码以3种不同的方式重新使用x,因此无法确定你的意图 - 所以我把它保留原样 - 虽然我很确定这是错误的 - 看看熊猫API)
import pandas as pd
import requests
api_key = 'THIS_IS_MY_KEY'
api_url = 'http://apiurl.com/doc?limit=10' # fake url
headers = {'Authorization': 'Bearer ' + api_key}
for offset in range(0, 100, 10): # makes a list [0, 10,20,30,40,50,60,70,80,90,100]
url = api_url + '&offset=' + str(offset)
r = requests.get(url, headers=headers)
x = pd.DataFrame(r.json())
x = x['data'].apply(pd.Series)
return x
答案 1 :(得分:0)
你看到了什么结果? 试试
url = api_url + '&offset=' + str(x * 10)
答案 2 :(得分:0)
变量 number 永远不会改变,因为它在循环开始时设置为 0 。
我想你的意思是:
import pandas as pd
import requests
api_key = 'THIS_IS_MY_KEY'
api_url = 'http://apiurl.com/doc?limit=10' # fake url
headers = {'Authorization': 'Bearer ' + api_key}
number = 0
for x in range(0, 10):
url = api_url + '&offset=' + str(number + 10)
r = requests.get(url, headers=headers)
x = pd.DataFrame(r.json())
x = x['data'].apply(pd.Series)
number += 10
return x