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

如何使用GitHub Actions自动更新仓库中的.csv数据集文件?

实现GitHub Actions定时自动更新仓库数据集

一、前期准备

  • 确保代码已托管至GitHub仓库(公开/私有均可,私有仓库需确认Actions权限开启)
  • 将敏感信息存入GitHub Secrets避免硬编码泄露:
    1. 进入仓库Settings → Secrets and variables → Actions
    2. 创建两个仓库密钥:ACLED_API_KEY(填你的API密钥)、ACLED_EMAIL(填你的邮箱)

二、修改Python代码(直接保存文件到仓库目录)

GitHub Actions运行时会将仓库克隆到$GITHUB_WORKSPACE目录,我们需要修改Selenium的下载路径,让文件直接保存到该目录下,同时适配无头运行环境(适合CI/CD场景)。修改后的代码如下:

from datetime import date
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import os
import time

# 配置Chrome浏览器选项
chrome_options = Options()
# 指定下载路径为GitHub工作目录,本地测试时默认用当前目录
download_dir = os.getenv("GITHUB_WORKSPACE", ".")
prefs = {
    "download.default_directory": download_dir,
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
}
chrome_options.add_experimental_option("prefs", prefs)
# 无头模式运行,适配Actions无界面环境
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")

today = date.today()
d1 = today.strftime("%d/%m/%Y")

# 初始化浏览器驱动
driver = webdriver.Chrome(options=chrome_options)

try:
    driver.get("https://acleddata.com/data-export-tool/")
    # 从环境变量读取敏感信息
    driver.find_element(By.NAME, "key").send_keys(os.getenv("ACLED_API_KEY"))
    driver.find_element(By.NAME, "email").send_keys(os.getenv("ACLED_EMAIL"))
    driver.find_element(By.NAME, "event_date_from").send_keys(r"01/11/2020")
    driver.find_element(By.NAME, "event_date_to").send_keys(d1)
    driver.find_element(By.NAME, "country_typing").send_keys("Ethiopia")
    driver.find_element(By.XPATH, "//input[@data-check='mc-ethiopia']").click()
    driver.find_element(By.XPATH, "//button[normalize-space()='Accept']").click()
    driver.find_element(By.XPATH, "//input[@value='Export']").click()
    
    # 等待文件下载完成(可根据文件大小调整等待时间)
    time.sleep(10)
    
finally:
    driver.quit()

三、编写GitHub Actions配置文件

在仓库根目录创建.github/workflows/update_dataset.yml文件,内容如下:

name: 定时更新ACLED数据集
on:
  schedule:
    # Cron表达式:分 时 日 月 周,示例为每X天UTC时间0点运行,替换X为具体天数
    - cron: '0 0 */X * *'
  workflow_dispatch: # 手动触发开关,用于测试

jobs:
  update-data:
    runs-on: ubuntu-latest
    steps:
      - name: 克隆仓库
        uses: actions/checkout@v4
        with:
          fetch-depth: 0 # 拉取完整仓库历史,确保提交正常

      - name: 设置Python环境
        uses: actions/setup-python@v5
        with:
          python-version: '3.10' # 选择适配的Python版本

      - name: 安装依赖
        run: |
          python -m pip install --upgrade pip
          pip install selenium webdriver-manager
          # Ubuntu环境安装Chrome浏览器
          sudo apt-get update
          sudo apt-get install -y chromium-browser

      - name: 运行数据获取脚本
        env:
          ACLED_API_KEY: ${{ secrets.ACLED_API_KEY }}
          ACLED_EMAIL: ${{ secrets.ACLED_EMAIL }}
        run: python your_script_name.py # 替换为你的Python脚本文件名

      - name: 提交并推送更新
        run: |
          git config --global user.name "GitHub Actions"
          git config --global user.email "actions@github.com"
          git add . # 若文件名固定,可改为git add 具体文件名,避免提交无关文件
          git commit -m "更新数据集:$(date +'%Y-%m-%d')"
          git push

四、关键注意事项

  • 定时任务调整:Cron表达式的时间为UTC时区,需根据你的需求换算后修改,比如每7天运行一次可改为0 0 */7 * *
  • 下载等待优化:示例中用固定sleep等待下载,可优化为检查目录中是否出现目标文件的逻辑,避免等待时间过长或不足
  • 文件提交控制:若下载文件名称带日期,建议在Python脚本中重命名为固定名称(如acled_ethiopia_data.csv),方便Git追踪变更
  • 测试验证:可进入仓库Actions页面,找到对应工作流,点击「Run workflow」手动触发运行,验证流程是否正常

内容的提问来源于stack exchange,提问作者Broccoli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:01:46