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

Python调用GitHub API搜索仓库仅返回30条结果如何获取更多数据

问题原因

GitHub 搜索类API默认单页返回30条结果,未携带分页参数的请求只会拉取第一页数据,因此最终文件仅会保存30条链接,该限制和个人访问令牌5000次/小时的请求额度无关。

分页相关参数说明

GitHub搜索仓库接口支持两个分页控制参数,直接拼接到请求URL中即可生效:

  • per_page:单页返回的结果数量,合法取值范围1-100,超过100时接口会自动重置为默认值30
  • page:指定要拉取的页码,从1开始计数

注意:GitHub搜索API有硬限制,单次查询条件最多只能返回前1000条匹配结果,即使翻页超过10页(单页100条)的范围,也无法拿到更多数据。如果需要获取超过1000条结果,可以通过拆分搜索条件(比如按star数区间、仓库创建时间区间拆分多次查询)实现。

修正后的实现代码
import requests
import time

# 替换为你的个人访问令牌即可,不需要填写用户名
token = "your_personal_access_token_here"
headers = {'Authorization': 'token ' + token}

# 拉取配置
per_page = 100  # 单页拉满100条,减少总请求次数
page = 1
all_repo_urls = []

while True:
    print(f"正在拉取第{page}页数据...")
    # 拼接分页参数到请求地址
    url = f"https://api.github.com/search/repositories?q=language:javascript&sort=stars&order=desc&per_page={per_page}&page={page}"
    resp = requests.get(url, headers=headers)
    # 处理请求异常
    if resp.status_code != 200:
        print(f"请求出错,状态码:{resp.status_code},返回信息:{resp.text}")
        break
    data = resp.json()
    items = data.get("items", [])
    # 当前页无数据时停止翻页
    if not items:
        break
    # 提取仓库主页链接
    for item in items:
        repo_url = item.get("html_url")
        if repo_url:
            all_repo_urls.append(repo_url)
    # 到达1000条接口上限时停止拉取
    if len(all_repo_urls) >= 1000:
        print("已到达搜索接口1000条结果上限,停止拉取")
        break
    page += 1
    # 增加1秒延时,避免短时间请求过多触发临时限流
    time.sleep(1)

# 写入本地文件
with open("snapshotJS.txt", "w", encoding="utf-8") as f:
    for url in all_repo_urls:
        f.write(url + "\n")

print(f"共获取到{len(all_repo_urls)}条仓库链接,已写入snapshotJS.txt文件")
额外说明
  • 原代码中同时使用auth传参和请求头传令牌的写法重复,统一用请求头携带令牌即可,不需要填写用户名
  • 原代码中请求https://api.github.com/user的逻辑仅用于验证令牌有效性,不需要的话可以直接删除
  • 如果需要突破1000条结果的限制,可以把搜索条件拆分为多个小范围查询,比如把q=language:javascript拆成按star数分段:q=language:javascript stars:0..100、q=language:javascript stars:101..500等,每个分段查询单独拉取分页结果,最后合并去重即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:03:36