如何无分页获取Github组织下依赖指定库的仓库名称列表
实现方案
你当前的结果少主要有三个原因:固定分页页数导致漏页、并行请求触发Github反爬拦截、正则匹配网页结构不稳定,可选择以下两种更稳定的方案实现需求:
方案一:使用Github官方工具gh CLI实现(优先推荐)
这是最稳定不需要处理分页、认证、反爬的方案,直接调用官方搜索能力:
- 先安装官方命令行工具
gh并完成认证 - 直接执行以下命令即可输出去重后的符合条件的仓库名:
# 替换尖括号内容为你的实际参数即可 gh search code "<import string_utils的匹配内容>" \ --org <你的目标组织名> \ --filename <要匹配的文件名,比如pom.xml> \ --json repository \ --jq '.[].repository.full_name' \ | sort -u
该命令会自动处理分页逻辑,不会出现漏页问题,也不需要你手动解析网页内容,匹配准确率远高于自行爬取网页。
方案二:优化原有爬虫脚本
如果必须使用原有curl爬网页的逻辑,做以下修改即可解决分页问题:
- 去掉固定的
$PAGES变量,每次请求后提取页面分页导航栏的最大页码,动态循环到最大页为止 - 去掉xargs的
-P0全并行参数,改为-P2低并发请求,避免触发反爬返回空结果 - 给curl添加重试参数
--retry 3 --retry-delay 5,避免临时网络波动导致漏页 - 正则匹配的规则可以优化,避免页面结构微调导致匹配失效
- 如果符合条件的仓库总数超过1000个(Github搜索的硬上限),需要拆分搜索条件,比如按仓库创建时间段拆分多次搜索后合并结果,即可拿到全量数据。
内容的提问来源于stack exchange,提问作者Cuauhtli
相关产品推荐
相关产品推荐

