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

如何无需手动指定页码获取REST API请求的全部分页数据

实现方法

这种返回lastPage总页数字段、但不返回下一页链接的分页接口,不需要手动指定页码就能拉全量数据,核心逻辑是靠首页响应自动拿到总页数,再自动完成循环遍历:

  • 固定perPage为接口支持的最大值250,尽可能减少请求次数
  • 首先发起第1页的请求,解析响应后一方面暂存第一页的条目数据,另一方面直接从stats.lastPage读取总页数,全程不需要你手动查、手动填总页码
  • 从第2页开始逐页发起请求,直到当前页码等于总页数时停止,每拉完一页就把条目追加到总结果集里
  • 如果接口返回第一页的lastPage就是1(比如你给出的示例场景),后续循环不会触发,直接返回结果,不会出现逻辑错误

实际使用时可以根据接口的限流规则加适当的请求间隔、失败重试逻辑,避免请求被拦截。

完整修改后的代码

import requests
import json

# 基础接口地址,不需要手动拼接page参数
base_url = "https://api-v2.pitchbook.com/deals/search"
# 固定公共请求参数
req_params = {
    "keywords": "machine learning accelerator",
    "perPage": 250
}
headers = {
    "Authorization": "PB-Token 1234567"
}

all_deals = []
# 拉取第一页数据
first_resp = requests.get(base_url, params=req_params, headers=headers)
first_data = first_resp.json()
all_deals.extend(first_data["items"])
# 自动从响应中获取总页数,不需要手动指定
total_page = first_data["stats"]["lastPage"]

# 循环拉取剩余所有页
for current_page in range(2, total_page + 1):
    # 动态传入当前页码参数
    current_params = req_params.copy()
    current_params["page"] = current_page
    resp = requests.get(base_url, params=current_params, headers=headers)
    page_data = resp.json()
    all_deals.extend(page_data["items"])

# 组装最终全量结果
full_data = {
    "total_count": first_data["stats"]["total"],
    "deals": all_deals
}

# 打印/存储结果
print(json.dumps(full_data, indent=2, ensure_ascii=False))

逻辑说明

  • 用requests的params参数传参比手动拼接URL更可靠,不会出现参数格式错误
  • 边界场景已经做了兼容:不管总页数是1还是上百页,逻辑都能正常运行,不需要手动调整
  • 所有页码都是程序自动计算传入,你只需要改基础的搜索参数、鉴权信息即可,不需要手动修改URL里的页码值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:54:17