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

Python调用分页API循环采集时无法追加所有页面数据仅获最后一页如何解决

问题代码错误分析
  • URL参数拼接错误:查询参数之间需要用&分隔,原代码里参数之间用了空格,导致服务端只能识别第一个参数,每次请求实际返回的都是默认的最后一页数据
  • 认证参数传值错误:HTTPBasicAuth里传入的是带引号的字符串'username'和'password',不是你提前定义的变量,会导致认证失败,接口返回非JSON格式的错误响应,这也是你之前直接加.json()方法代码报错的核心原因
  • 分页范围错误:range(1,88)生成的是1到87的整数,共87页,你需要拉取88页的话应该改成range(1, 89)
  • 数据存储错误:原代码直接把requests返回的响应对象存入列表,没有解析响应体内容,也没有做请求状态校验,很容易出现异常
修正后的代码示例
import requests
from requests.auth import HTTPBasicAuth

username = "xxx"
# 如果使用API Token认证,按接口要求填入对应字段即可,大部分场景下Token直接填到password字段
password= "xxx"
    
all_pages = []

for page in range(1,89):
    # 修正参数拼接规则,用&分隔不同查询参数
    url = f'https://api.riskmethods.net/v1/indicator_messages?per_page=1000&page={page}'
    resp = requests.get(url=url, auth=HTTPBasicAuth(username, password))
    # 先校验请求状态再解析数据,避免异常
    if resp.status_code == 200:
        page_data = resp.json()
        # 如果接口返回的结构体里,数据列表在对应key下,比如page_data['data'],就改成all_pages.extend(page_data['data'])
        all_pages.extend(page_data)
    else:
        print(f"第{page}页请求失败,状态码:{resp.status_code},响应片段:{resp.text[:200]}")
认证参数传入说明
  • 使用HTTPBasicAuth时直接传入提前定义好的账号、密码/Token变量即可,不要给变量额外加引号,加引号会被识别为固定字符串,无法读取变量内的实际值
  • 如果是Token形式的Basic认证,大部分接口要求username留空字符串"",password字段填Token即可,少部分接口要求username固定填"apikey",按接口文档要求调整即可

内容的提问来源于stack exchange,提问作者Rafał Pietrak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 07:33:01