如何在 R 中网络抓取 GitHub 项目贡献者信息?

问题描述 投票:0回答:1

我想编写一个函数,从 GitHub 项目的贡献者页面中提取一些贡献者数据。例如:https://github.com/easystats/report/graphs/contributors

如何使用 R 提取用户名、提交次数、添加次数和删除次数?

这是我使用

rvest
https://github.com/tidyverse/rvest)进行网络抓取的尝试:

library(rvest)

contribs <- read_html("https://github.com/easystats/report/graphs/contributors")

section <- contribs %>% html_elements("section")
section
#> {xml_nodeset (0)}

contribs$node
#> <pointer: 0x0000027d9b9e9f10>
contribs$doc
#> <pointer: 0x0000027d9e03d140>

创建于 2023-01-29,使用 reprex v2.0.2

但我认为我没有得到预期的结果。

但是,我更喜欢一个可以使用现有 R 包或 GitHub API (https://github.com/r-lib/gh) 的解决方案。
但这有可能吗?

r github web-scraping rvest
1个回答
1
投票

在开发者工具的网络部分找到他们的API

library(tidyverse)
library(httr2)

"https://github.com/easystats/report/graphs/contributors-data" %>%
  request() %>%
  req_headers("x-requested-with" = "XMLHttpRequest",
              accept = "appliacation/json") %>%
  req_perform() %>%
  resp_body_json(simplifyVector = TRUE) %>%
  unnest(everything()) %>%
  group_by(username = str_remove(path, "/")) %>%
  summarise(across(a:c, sum)) 

# A tibble: 21 x 4
   username                a      d     c
   <chr>               <int>  <int> <int>
 1 DominiqueMakowski  203778 148154   325
 2 IndrajeetPatil      15082  10513   159
 3 LukasWallrich           1      1     1
 4 bwiernik             1371    156    11
 5 cgeger                  1      1     1
 6 drfeinberg            127     23     1
 7 dtoher                 26     26     1
 8 etiennebacher         127    162     7
 9 fkohrt                  1      1     1
10 grimmjulian             2      2     1
11 humanfactors           22     23     4
12 jdtrat                  1      1     1
13 m-macaskill            33     31     2
14 mattansb             1009    603    14
15 mutlusun              265      4     4
16 pkoaz                   3      2     1
17 rempsyc              3427   2938    14
18 strengejacke         5129  38164   223
19 vincentarelbundock      5      0     1
20 webbedfeet             85     85     2
21 wjschne                 2      2     1
© www.soinside.com 2019 - 2024. All rights reserved.