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

通过Gitlab API提取合并请求数据时分页获取受限的问题求助

GitLab API 获取全部合并请求的分页实现

GitLab API 的 per_page 参数上限为100,所以无论设置多大的值,单次请求最多返回100条数据。要获取全部合并请求,必须通过分页迭代的方式,结合 page 参数逐页请求数据。

实现思路

  • 从第1页开始发起请求,每次请求递增页码
  • 每次请求后检查返回的数据是否为空,为空则说明已获取全部数据,停止循环
  • 可选:通过响应头的 X-Total-Pages 字段获取总页数,直接循环到总页数(更高效)

修改后的代码

# Import libraries
import os
import pandas as pd
import requests
from dotenv import load_dotenv

load_dotenv()

# Assign variables from .env
pat = os.getenv("PAT")
gitlab_url = os.getenv("HOST_URL")

headers = {"Private-Token": pat}
all_merge_requests = []
page = 1

while True:
    # 拼接带分页参数的API地址
    api_url = f"{gitlab_url}/api/v4/merge_requests?scope=all&state=all&per_page=100&page={page}"
    response = requests.get(api_url, headers=headers)
    
    # 检查请求是否成功
    if response.status_code != 200:
        print(f"请求第{page}页失败,状态码:{response.status_code}")
        break
    
    current_page_mrs = response.json()
    # 如果当前页无数据,说明已遍历完所有页
    if not current_page_mrs:
        break
    
    all_merge_requests.extend(current_page_mrs)
    page += 1
    print(f"已获取第{page-1}页数据,累计{len(all_merge_requests)}条")

# 转换为DataFrame并保存
df = pd.DataFrame(all_merge_requests)
df.info()
df.to_excel("merge_requests.xlsx", index=False)

关键说明

  1. 分页参数:每次请求添加 page={page} 参数,页码从1开始递增
  2. 终止条件:当当前页返回空列表时,停止循环,因为GitLab API在超出总页数后会返回空数据
  3. 请求校验:增加状态码检查,避免因请求失败导致的程序异常
  4. 数据合并:用 extend() 方法将每页数据合并到总列表中,确保所有数据被收集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:31:01