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

通过Python requests下载GitHub公开仓库数百个raw文件是否存在限制?

该工作流存在多类限制,具体如下
  • API速率限制:GitHub 对未认证的 REST API 请求限制为每小时 60 次,你当前的代码没有带身份认证信息,如果请求频次稍高(比如多用户共用、单次拉取多个仓库)会很快触发限流,返回403错误。如果走认证模式(请求头携带个人访问令牌),单用户每小时可请求5000次,能大幅提升阈值;如果是多用户共用同一个服务IP请求,就算走认证,也可能触发IP维度的临时限流。
  • contents接口条目上限与分页限制:你调用的/repos/{owner}/{repo}/contents接口默认每页仅返回30个条目,可通过per_page参数调整到最大100条/页,最多仅返回1000个文件/目录条目,刚好匹配你提到的最多1000个文件的使用上限,你需要额外处理分页逻辑才能拿到完整的1000条数据;若后续目录内文件超过1000,该接口将无法返回完整列表,需要改用Git Tree接口拉取全量条目。
  • raw资源访问限制:批量高频拉取raw文件会触发GitHub的反爬机制,同样会返回限流错误,且你当前代码拉取raw时没有设置超时,遇到网络波动会直接卡住。
  • 异常场景无兼容:当前代码没有做任何异常处理:如果API请求失败(404/403/500等状态码),直接调用r.json()会抛出异常;如果目录内存在子目录,子目录条目没有download_url字段,遍历取值会直接报错;如果仓库对应路径的文件是LFS存储的资源,拿到的download_url下载到的会是LFS元数据而非真实文件内容。
代码优化建议

可以针对上述问题调整代码,参考示例如下:

import requests
import urllib.request

# 可选:添加GitHub个人访问令牌提升限流阈值
headers = {
    "Authorization": "token 你的个人访问令牌",
    "Accept": "application/vnd.github.v3+json"
}
# 增加per_page参数调整单页返回数量,后续可根据响应头的Link字段处理分页
url = f'https://api.github.com/repos/{owner}/{repo}/contents/Scenes?ref=main&per_page=100'
# 加超时和请求头
r = requests.get(url, headers=headers, timeout=10)
# 先判断请求是否成功
if r.status_code != 200:
    # 自行处理错误逻辑,比如抛异常、重试
    raise Exception(f"接口请求失败,状态码:{r.status_code}")

for item in r.json():
    # 过滤掉子目录,只处理文件
    if item['type'] != 'file':
        continue
    raw_url = item['download_url']
    # 用with语法自动释放连接,加超时参数
    with urllib.request.urlopen(raw_url, timeout=10) as f:
        code = f.read()
        # 后续文件处理逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:54:02