如何用非API的R命令获取GitHub仓库中CSV文件的元数据?
获取GitHub上CSV文件元数据的非API R方案
你要的两个元数据都可以不用GitHub API,用基础的HTTP请求和网页解析搞定,具体方法如下:
1. 获取文件字节大小
用httr包发送HEAD请求(仅获取响应头,无需下载整个文件),从响应头里提取Content-Length字段即可得到文件大小。示例代码:
library(httr) file_url <- "https://github.com/BrunaLab/LAS6292_DataManagement/blob/4b856c2fad350edaded78fba671023b8c544b1dd/static/course-materials/class-sessions/03-spreadsheets/examples/EB_data_example.csv" # 需将链接中的blob替换为raw,才能获取原始文件的响应头 raw_file_url <- gsub("blob/", "raw/", file_url) resp <- HEAD(raw_file_url) file_size_bytes <- as.numeric(headers(resp)$`content-length`) cat("文件大小:", file_size_bytes, "字节\n")
2. 获取最后提交日期
用rvest包解析GitHub文件页面的HTML,抓取页面上显示的最后提交时间。示例代码:
library(rvest) file_page_url <- "https://github.com/BrunaLab/LAS6292_DataManagement/blob/4b856c2fad350edaded78fba671023b8c544b1dd/static/course-materials/class-sessions/03-spreadsheets/examples/EB_data_example.csv" page <- read_html(file_page_url) # 定位页面中最后提交时间的元素(基于当前GitHub页面布局) last_commit_time <- page %>% html_element(".f6.text-gray.mt-2 time") %>% html_attr("datetime") %>% as.POSIXct(format = "%Y-%m-%dT%H:%M:%SZ", tz = "UTC") cat("最后提交日期:", format(last_commit_time, "%Y-%m-%d %H:%M:%S UTC"), "\n")
注意事项
- 解析HTML的方法依赖当前GitHub页面结构,若平台后续调整页面布局,元素选择器可能需要更新,但短期可稳定使用。
- 两种方法均无需GitHub API密钥,仅依赖公开页面的请求与解析。
内容的提问来源于stack exchange,提问作者Emilio M. Bruna
相关产品推荐
相关产品推荐

