对CSV(Python)进行分页

对CSV(Python)进行分页,python,Python,如何使用Python对CSV版本的API调用进行分页 我知道JSON调用中的元数据包括记录总数,但是如果CSV调用中没有类似的信息,我就不知道在哪里停止循环,如果我尝试增加页面参数 下面是我的代码: url = 'https://api.data.gov/ed/collegescorecard/v1/schools.csv' payload = { 'api_key': '4KC***UNKk', 'fields': 'school.name,2012.repayment.2_

如何使用Python对CSV版本的API调用进行分页

我知道JSON调用中的元数据包括记录总数,但是如果CSV调用中没有类似的信息,我就不知道在哪里停止循环,如果我尝试增加页面参数

下面是我的代码:

url = 'https://api.data.gov/ed/collegescorecard/v1/schools.csv'

payload = {
    'api_key': '4KC***UNKk',
    'fields': 'school.name,2012.repayment.2_yr_default_rate',
    '_page' : '0'
}

r = requests.get(url, params=payload)
df = pd.read_csv(r.url)

这将加载包含前20个结果的数据帧,但我希望加载包含所有结果的数据帧

利用
和_per_page
选项参数编辑每次通话的选择数;将其设置为
&_per_page=200
将返回一个包含100行的CSV,因此假设100是最大值

现在,我们知道了每个调用的最大值,并且知道了总调用数,可以运行for循环来获得所需的内容,如下所示:

url = 'https://api.data.gov/ed/collegescorecard/v1/schools.csv'
apikey = '&api_key=xxx'
fields = '&_fields=school.name,2012.repayment.2_yr_default_rate'
pageA = '&_page='
pageTotal = '&_per_page='
pageNumbersMaximum = 10
rowSum = 200
for page in range(pageNumbersMaximum):
    fullURL = url + pageA + str(page) + pageTotal + str(rowSum) + fields + apikey
    print(fullURL)
    print("Page Number: " + str(page) + ", Total Rows: " + str(rowSum))
    rowSum += 200

这将在结果中循环,直到总数达到7000。

您需要包含一个计数,在该计数满后,再加载到数据帧中,由于模仿api,直接加载到数据帧将不起作用。@sb0709我如何知道何时结束计数?如果我做了一个额外的循环,它就会中断。不需要中断,每20个结果都会读取所有内容,并将循环直到达到7000个结果。Aswer bellow确实解释了api选项,但我更喜欢pythonic的方式,这只是我的偏好。谢谢你的帮助。这里的挑战是在哪里停止循环。7000只是一个例子。但问题是,我不知道要生成多少个循环,并且生成一个额外的循环会导致错误。好的,那么每个调用都应该包装在try/except中,并在失败时中断循环。我有空时会编辑此内容。@TimErnst这实际上比看起来要困难得多(@至少对我来说是这样)…如果您的回复数量超过了,您仍然可以获得csv下载。它的床铺,但你仍然有一个。至少还需要一层身份验证…@TimErnst这篇文章实际上对我很有帮助: