如何使用Github Actions定时运行R爬虫并提交生成的CSV文件
问题诊断与修复方案
1 YAML配置问题修复
- 缩进错误(致命问题):原配置中
Commit files步骤的缩进层级错误,和autoscrapejob平级,不属于steps下的执行步骤,导致工作流解析失败。需调整缩进和Scrape步骤对齐。 - 运行器兼容性问题:
windows-latest运行器对R环境、git命令的兼容性更差,且启动速度慢,建议替换为ubuntu-latest。 - 路径不匹配问题:你在commit步骤指定
git add data/*,但R脚本将csv文件写入仓库根目录,git找不到对应文件会导致commit失败。要么修改R脚本写入路径为data/Headlinks.csv,要么修改add命令为git add Headlinks.csv。 - 空提交报错问题:如果某次运行没有产生文件改动,
git commit会返回非0状态码导致工作流失败,需增加无改动跳过逻辑。 - 包安装超时问题:
tidyverse安装耗时长,默认CRAN源在海外容易超时,建议指定国内镜像,同时合并包安装命令减少执行步骤。 - 权限配置问题:默认GITHUB_TOKEN只有仓库读权限,需要手动开启写权限:可以在仓库
Settings > Actions > General > Workflow permissions中选择Read and write permissions,或者在YAML中增加权限声明。
2 R脚本问题修复
- 表头重复问题:
write.csv的append=TRUE参数会每次写入都插入表头,最终csv文件会存在大量重复表头行,需修改写入逻辑,仅在文件不存在时写入表头。 - 网络容错问题:请求目标网站超时、被拦截时脚本会直接崩溃,建议增加异常捕获逻辑避免工作流失败。
3 修复后参考代码
修正后的YAML配置
name: Aljazeera_headlines_scraper on: schedule: - cron: '*/20 * * * 1-5' # 可选:添加手动触发方便测试 workflow_dispatch: permissions: contents: write jobs: autoscrape: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: r-lib/actions/setup-r@v2 - name: Install packages run: | R -e 'install.packages(c("rvest", "tidyverse"), repos = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/")' - name: Scrape run: Rscript Aljazeera_scraper.R - name: Commit files run: | git config --local user.name actions-user git config --local user.email "actions@github.com" git add Headlinks.csv git commit -am "GH ACTION Headlines $(date)" || echo "No changes to commit" git push origin main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
修正后的R脚本
library(rvest) library(tidyverse) # 增加异常捕获 tryCatch({ aljurl <- read_html("https://www.aljazeera.com/") headlinks <- aljurl %>% html_nodes(".u-clickable-card__link") %>% html_attr("href") links <- data.frame( date = Sys.Date(), headline_links = headlinks ) # 避免重复写入表头,去掉行号 write.table(links, file = "Headlinks.csv", append = TRUE, sep = ",", col.names = !file.exists("Headlinks.csv"), row.names = FALSE, quote = FALSE) }, error = function(e) { print(paste("Scrape failed:", e$message)) quit(status = 0) })
内容的提问来源于stack exchange,提问作者Ifeanyi Idiaye
相关产品推荐
相关产品推荐

