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

如何基于法甲赛事日期自动触发Python数据采集代码?

问题

我正在收集数据以训练分类算法,希望能在有法甲赛事的日期自动运行数据采集代码。目前的数据采集代码如下:

PerfsL1 = pd.read_html('https://fbref.com/fr/comps/13/stats/Statistiques-Ligue-1#all_stats_standard', header=1)[0]
PerfsL1.to_csv("PerfsL1.csv")

我已经获取了法甲赛事日历数据,处理代码和输出示例如下:

日历处理代码

# INPUT 
CalL1 = pd.read_html('https://fbref.com/fr/comps/13/calendrier/Scores-et-tableaux-Ligue-1')
CalL1 = CalL1[0]
CalL1.drop(['Attendance', 'Referee', 'Rapport de match', 'Notes'], axis=1, inplace=True)
CalL1.to_csv('Calendrier_Hisotrique_L1_Saison_2022/2023.csv')  # 修正原代码变量名与文件名拼写错误

日历数据输出示例

Wk  Day        Date   Time       Domicile   xG Score  xG.1  
0     1.0  Ven  2022-08-05  21:00           Lyon  1.5   2–1   1.2  
1     1.0  Sam  2022-08-06  17:00     Strasbourg  1.2   1–2   3.2  
2     1.0  Sam  2022-08-06  21:00  Clermont Foot  0.3   0–5   2.6  
3     1.0  Dim  2022-08-07  13:00       Toulouse  1.2   1–1   1.0  
4     1.0  Dim  2022-08-07  15:00          Lille  1.8   4–1   0.9  
..    ...  ...         ...    ...            ...  ...   ...   ...  
414  38.0  Sam  2023-06-03    NaN        Ajaccio  NaN   NaN   NaN  

请问是否可以实现当日期与赛事日期匹配时,自动运行上述数据采集代码?

解决方案

完全可以实现,以下是两种可靠的落地思路:

方法一:用Python schedule库定时检查日期

适合本地长期后台运行脚本,每天固定时间检查当天是否有赛事,触发采集逻辑。

完整代码示例

import pandas as pd
import schedule
import time
from datetime import date

def collect_l1_data():
    """执行法甲数据采集并保存"""
    PerfsL1 = pd.read_html('https://fbref.com/fr/comps/13/stats/Statistiques-Ligue-1#all_stats_standard', header=1)[0]
    PerfsL1.to_csv("PerfsL1.csv", index=False)
    print(f"数据已更新:{date.today()}")

def check_and_run():
    """检查当天是否有赛事,有则执行采集"""
    try:
        # 读取预处理后的日历数据
        cal_df = pd.read_csv('Calendrier_Hisotrique_L1_Saison_2022/2023.csv')
        # 转换日期格式为统一的date类型
        cal_df['Date'] = pd.to_datetime(cal_df['Date']).dt.date
        today = date.today()
        
        # 判断当天是否存在赛事记录
        if today in cal_df['Date'].values:
            collect_l1_data()
        else:
            print(f"{today} 无赛事,跳过采集")
    except Exception as e:
        print(f"检查或执行出错:{str(e)}")

# 设置每天22:00执行检查(赛事多在当日结束后,此时采集数据更完整)
schedule.every().day.at("22:00").do(check_and_run)

# 保持脚本持续运行
while True:
    schedule.run_pending()
    time.sleep(3600)  # 每小时检查一次任务队列

关键注意点

  • 提前修正原日历代码的拼写错误:将ClL1改为CalL1,文件名添加.csv后缀,避免读取失败
  • 可根据赛事结束时间调整检查点,比如若有晚场赛事,可延后至23:00执行
  • 若赛事日历有更新,可将日历爬取逻辑也加入定时任务,定期同步最新赛程

方法二:系统级定时任务(Cron/任务计划程序)+ 日期判断

适合不需要脚本长期后台运行的场景,利用系统自带定时工具触发脚本,脚本内部完成日期校验。

操作步骤

  1. 编写独立的判断采集脚本(如auto_collect_l1.py),内容与方法一中的check_and_run、collect_l1_data函数一致
  2. 设置系统定时任务:
    • Linux/macOS:执行crontab -e添加规则,每天22:00运行脚本:
      0 22 * * * /usr/bin/python3 /你的脚本路径/auto_collect_l1.py
      
    • Windows:打开「任务计划程序」,创建每日22:00触发的任务,指定执行该Python脚本

额外优化建议

  • 加入数据增量更新逻辑,避免每次覆盖全量数据,提升效率
  • 对日历数据做去重处理,消除重复日期的干扰
  • 添加日志记录功能,方便排查运行异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:54:20