通过循环进行十次api调用

时间:2014-06-04 02:28:55

标签: python

我想使用的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

3 个答案:

答案 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