如何使用python调用和遍历分页API

时间:2019-12-18 17:43:57

标签: python api loops pagination

我正在尝试调用python API以获取大约21,500条记录的结果集,其中PageSize限制或默认值为4000条记录。我也不知道页面总数,也没有“ next_url”或“ last_page_url”链接。唯一给出的是结果总数21205,然后我可以将其除以4000的PageSize限制,等于5.30125页。
我在想两种可能的方式,就是我不确定如何将其放入代码中。

首先执行一个while循环,以查看结果集= 4000的PageSize,然后循环遍历另一个页面。

第二个是每个循环,如果页面总数是5.3,则将其舍入到6以获取所有记录并通过page = + 1分页
最后,我需要将所有记录追加到ta pandas数据框,以便可以导出到sql表。 任何帮助将不胜感激。


url = "https://api2.enquiresolutions.com/v3/?Id=XXXX&ListId=161585&PageSize=4000"

auth =  { 'Ocp-Apim-Subscription-Key': 'XXX', 'Content-Type': 'application/json'}

params = {'PageNumber': page}  

res = requests.get(url=url,  headers=auth, params=params).json()

df = pd.DataFrame(res['result'])
total_result= df['total'][0]
total_pages = int(total_result) /4000

properties = json_normalize(df['individuals'],record_path=['properties'],meta= 
['casenumber','individualid','type'])

properties['Data'] = properties.label.str.cat(properties.id,sep='_')

properties = properties.drop(['label','id'],axis=1)

pivotprop = properties.pivot(index='individualid', columns='Data', values='value')

data = pivotprop.reset_index()  

data.to_sql('crm_Properties',con=engine, if_exists='append'

1 个答案:

答案 0 :(得分:1)

您是否正在寻找类似的东西?您只需循环直到结果大小小于4000,然后将数据合并到列表中即可

url = "https://api2.enquiresolutions.com/v3/?Id=XXXX&ListId=161585&PageSize=4000"

auth =  { 'Ocp-Apim-Subscription-Key': 'XXX', 'Content-Type': 'application/json'}
page = 0
params = {'PageNumber': page}  

pages_remaining = True
full_res = []

while pages_remaining:
    res = requests.get(url=url,  headers=auth, params=params).json()
    full_res.append(res['result'])
    page += 4000
    params = {'PageNumber' : page}
    if not len(res['result']) == 4000:
        pages_remaining = False