如何使用Python循环api以从特定的页面组中提取记录



我编写了一个Python脚本,从api中提取json数据。api有10k条记录

当我设置我的脚本,我只拉10页,(每页包含25项),所以它工作得很好,转储所有的csv文件,也把所有的mysql数据库。

当我运行时,我认为这将是我的最后一次测试,我应该说-试图从所有500页中提取数据,得到一个内部服务器错误. 所以我研究了一下,认为这是因为我一次提取了所有的数据。api文档有点蹩脚,可以找到任何速率限制信息,无论如何…

因为这不是我的api,我认为一个快速的解决方案只是运行我的脚本,让它从前10页拉数据,然后第二个10页,第三个10页等。

由于明显的原因,我不能展示所有的代码,但下面是基本的/片段。这很简单,只需对url进行分级,稍微操作一下,这样我就可以添加page#,然后计算页面数量,然后循环并获取数据内容。

有人可以帮助解释/展示我如何通过我的url运行/循环,从1-10页获取内容,然后下一个循环通过并从11-21页获取内容,等等?

任何见解,建议,例子都将不胜感激。


import requests
import json
import pandas as pd
import time
from datetime import datetime, timedelta
time_now = time.strftime("%Y%m%d-%H%M%S")
# Make our Request
def main_request(baseurl, x, endpoint, headers):
r = requests.get(baseurl + f'{x}' + endpoint, headers=headers)
return r.json()

# determine how many pages are needed to loop through, use for pagination
def get_pages(response):
#   return response['page']['size']
return 2  

def parse_json(response):
animal_list = []
for item in response['_embedded']['results']:
animal_details = {
'animal type': item['_type'],
'animal title': item['title'],
'animal phase': item['type']['value']
}
animal_list.append(animal_details)
return animal_list

animal_main_list = []
animal_data = main_request(baseurl, 1, endpoint, headers)
for x in range(1, get_pages(animal_data) + 1):
print(x)
mainList.extend(parse_json(main_request(baseurl, x, endpoint, headers)))

搞定了。使用range函数和我的url中的f{x}。在for循环中设置范围,它会更新url。我利用了睡眠。减慢检索速度的时间

最新更新