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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:31:06