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

Python请求GraphQL API如何实现游标分页循环拉取全量数据

实现方法

你需要做两处核心修改:一是调整GraphQL查询结构支持传入分页游标参数,二是编写循环逻辑持续拉取直到没有下一页数据,具体代码和说明如下。

关键修改点
  • 给GraphQL查询增加变量定义,让cards字段支持接收after游标参数
  • 初始化全量数据存储列表、游标变量、分页状态标记
  • 循环发起请求,首次请求不传游标,后续请求复用上次响应返回的endCursor作为分页起点
  • 每次请求完成后合并当前页数据,更新分页状态,直到hasNextPage为False时退出循环
  • 增加基础的异常判断和请求间隔,避免请求失败或触发接口限流
完整可运行代码
import requests
import json
import time

# 修改查询:增加after游标参数支持
query = """
    query GetPlayerCards($after: String) {
      player(slug:"lionel-andres-messi-cuccittini"){
            cards(rarities:[limited], after: $after) {
                nodes {
                    slug
                    userOwnerWithRate {
                        from
                    }
                }
                pageInfo{
                    startCursor
                    hasNextPage
                    endCursor
                }
            }
        }
    }
"""
url = 'https://api.sorare.com/graphql/'

# 初始化变量
all_cards = []
after_cursor = None
has_next_page = True

while has_next_page:
    # 构造请求变量
    variables = {}
    if after_cursor:
        variables["after"] = after_cursor
    
    # 发起请求
    r = requests.post(url, json={'query': query, 'variables': variables})
    # 基础请求错误判断
    r.raise_for_status()
    json_data = json.loads(r.text)
    
    # 提取当前页数据
    cards_data = json_data["data"]["player"]["cards"]
    current_nodes = cards_data["nodes"]
    # 合并到全量列表
    all_cards.extend(current_nodes)
    
    # 更新分页状态
    page_info = cards_data["pageInfo"]
    has_next_page = page_info["hasNextPage"]
    after_cursor = page_info["endCursor"]
    
    # 打印进度,可选
    print(f"已拉取{len(all_cards)}条数据,是否有下一页:{has_next_page}")
    
    # 加500ms间隔,避免触发接口限流
    time.sleep(0.5)

# 最终全量数据
print(f"拉取完成,总计{len(all_cards)}条卡片数据")
print(all_cards)
注意事项
  • 如果接口需要鉴权,你需要在requests.post里增加headers参数,带上对应的Authorization令牌,否则可能返回权限错误
  • 你可以根据接口的限流规则调整time.sleep的间隔,避免请求被拦截
  • 如果需要处理请求失败重试的场景,可以在请求逻辑外层加try-except捕获网络异常,设置重试次数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:27:09