如何用R获取GitHub项目贡献者的用户名、提交量等信息?
解决方案:用GitHub API(gh包)提取贡献者数据
完全可行,而且相比网页爬取,通过GitHub API配合gh包实现更稳定可靠,还能避免网页结构变动导致的爬取失效问题。你之前用rvest失败是因为GitHub贡献者页面的内容是JavaScript动态渲染的,静态爬取只能拿到空的HTML框架,无法获取实际数据。
步骤1:安装并配置gh包
首先安装gh包,它是GitHub API的官方R客户端:
install.packages("gh") library(gh)
建议设置GitHub个人访问令牌(PAT)来提升API请求限额(未认证每小时60次,认证后5000次):
# 替换为你的PAT,可在GitHub设置中生成 Sys.setenv(GITHUB_PAT = "your-personal-access-token")
步骤2:获取贡献者基础数据(用户名、提交次数)
调用GitHub REST API的/repos/{owner}/{repo}/contributors接口,获取贡献者的基础信息:
# 替换为目标仓库的所有者和仓库名 owner <- "easystats" repo <- "report" # 获取所有贡献者的基础数据 contrib_basic <- gh("/repos/{owner}/{repo}/contributors", owner = owner, repo = repo, .limit = Inf) # 转换为数据框 contrib_basic_df <- data.frame( 用户名 = sapply(contrib_basic, \(x) x$login), 总提交次数 = sapply(contrib_basic, \(x) x$contributions), 用户主页 = sapply(contrib_basic, \(x) x$html_url) )
步骤3:获取代码增删量统计
调用/repos/{owner}/{repo}/stats/contributors接口,获取每个贡献者累计的代码新增和删除量:
# 获取贡献者代码统计(首次调用可能返回空,需等待GitHub生成统计后重试) contrib_stats <- gh("/repos/{owner}/{repo}/stats/contributors", owner = owner, repo = repo) # 提取累计增删量并转换为数据框 contrib_stats_df <- do.call(rbind, lapply(contrib_stats, \(x) { 累计新增代码行 <- sum(sapply(x$weeks, \(w) w$a)) 累计删除代码行 <- sum(sapply(x$weeks, \(w) w$d)) data.frame( 用户名 = x$author$login, 累计新增代码行 = 累计新增代码行, 累计删除代码行 = 累计删除代码行 ) }))
步骤4:合并数据
将基础数据和统计数据合并为最终的结果数据框:
final_contrib_data <- merge(contrib_basic_df, contrib_stats_df, by = "用户名")
注意事项
stats/contributors接口需要GitHub后台生成统计数据,首次调用可能返回空列表,建议隔3-5分钟后重试。- 如果仓库贡献者很多,
gh的.limit = Inf会自动分页获取所有数据,无需手动处理分页。 - 相比网页爬取,API方式完全遵循GitHub的使用规则,不会触发反爬机制,数据格式也更规范。
内容的提问来源于stack exchange,提问作者rempsyc
相关产品推荐
相关产品推荐

