You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python循环获取API返回的全部分页JSON数据?

如何循环获取API所有页面的数据?

可以通过以下步骤实现全量数据拉取:

  1. 初始化存储容器:创建一个空列表,用来收集所有页面返回的records数据
  2. 获取总页数:先请求第一页数据,从响应里拿到pages字段(总页数)
  3. 循环请求所有页面:遍历从1到总页数的每一页,依次发送请求,解析数据并将records追加到列表中
  4. 合并为DataFrame:所有数据收集完成后,将列表转换为Pandas DataFrame

完整代码示例

import requests
import pandas as pd

# 初始化空列表存储所有记录
all_records = []
url = "你的API地址"

try:
    # 先请求第一页,获取总页数
    first_response = requests.get(url, params={'page': 1})
    first_response.raise_for_status()  # 检查请求是否成功
    first_data = first_response.json()
    total_pages = first_data['pages']
    
    # 循环请求每一页
    for page in range(1, total_pages + 1):
        print(f"正在获取第 {page}/{total_pages} 页数据")
        response = requests.get(url, params={'page': page})
        response.raise_for_status()
        page_data = response.json()
        all_records.extend(page_data['records'])  # 用extend避免嵌套列表
    
    # 转换为DataFrame
    df = pd.DataFrame(all_records)
    print("所有数据获取完成,DataFrame形状:", df.shape)
    print(df.head())

except requests.exceptions.RequestException as e:
    print(f"请求出错:{e}")

关键细节说明

  • 使用response.raise_for_status():如果请求返回错误状态码(比如404、500),会直接抛出异常,方便排查问题
  • 用extend()而非append():append()会把每一页的records列表作为单个元素加入,而extend()是把列表里的每个元素单独加入,最终得到扁平的记录列表
  • 异常捕获:处理网络请求中可能出现的错误,比如连接超时、API报错等
  • 可选优化:如果API有限流,可在循环中加入time.sleep(1)(需导入time模块),避免请求过于频繁被封禁

内容的提问来源于stack exchange,提问作者Alper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:30:54