通过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)
关键说明
- 分页参数:每次请求添加
page={page}参数,页码从1开始递增 - 终止条件:当当前页返回空列表时,停止循环,因为GitLab API在超出总页数后会返回空数据
- 请求校验:增加状态码检查,避免因请求失败导致的程序异常
- 数据合并:用
extend()方法将每页数据合并到总列表中,确保所有数据被收集
内容的提问来源于stack exchange,提问作者user25445238
相关产品推荐
相关产品推荐

