如何使用GitHub Actions自动更新仓库中的.csv数据集文件?
实现GitHub Actions定时自动更新仓库数据集
一、前期准备
- 确保代码已托管至GitHub仓库(公开/私有均可,私有仓库需确认Actions权限开启)
- 将敏感信息存入GitHub Secrets避免硬编码泄露:
- 进入仓库Settings → Secrets and variables → Actions
- 创建两个仓库密钥:
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
相关产品推荐
相关产品推荐

