使用sportsreference获取NFL数据时遇TypeError错误求助
解决sportsreference库获取NFL数据时的TypeError错误
问题背景
在Google Colab中使用sportsreference和pandas抓取过去25年NFL比赛技术统计(boxscores)并导出CSV时,出现如下错误:
unsupported operand type(s) for +=: 'datetime.date' and 'int'
报错原因
查看报错栈可知,Boxscores类的内部方法_find_games尝试对week变量执行week +=1操作,但该变量被传入了datetime.date类型的值(原代码中传的是日期范围),而该方法实际期望接收整数类型的周数或年份,不支持直接传入日期对象作为参数。
修复后的完整代码
首先安装依赖库:
!pip install sportsreference
修改后的抓取代码:
from sportsreference.nfl.boxscore import Boxscores import pandas as pd import datetime # 计算起始年份(当前年份往前推25年) current_year = datetime.datetime.now().year start_year = current_year - 25 # 初始化存储所有赛季数据的列表 all_games_stats = [] # 遍历每个赛季 for year in range(start_year, current_year + 1): print(f"正在抓取{year}赛季数据...") try: # 直接传入赛季年份获取该赛季所有比赛,NFL赛季跨年度,起始年份即为赛季标识 season_games = Boxscores(year) # 检查是否获取到比赛数据 if season_games.games: print(f"{year}赛季数据抓取成功") # 遍历每周的比赛 for week, week_games in season_games.games.items(): for game in week_games: # 提取单场比赛的技术统计 game_data = game['boxscore'] all_games_stats.append(pd.DataFrame([game_data])) else: print(f"{year}赛季未找到比赛数据") except Exception as e: print(f"{year}赛季抓取失败:{e}") # 合并所有数据并导出CSV if all_games_stats: nfl_games_stats_df = pd.concat(all_games_stats, ignore_index=True) print("数据预览:") print(nfl_games_stats_df.head()) nfl_games_stats_df.to_csv('nfl_games_stats_past_25_years.csv', index=False) print("数据已导出为nfl_games_stats_past_25_years.csv") else: print("未抓取到任何数据,请检查逻辑")
代码修改说明
- 移除日期对象构造:不再使用
datetime.date生成赛季起止日期,直接将赛季年份传入Boxscores(year),这是库支持的正确调用方式 - 简化遍历逻辑:
season_games.games是按周为键的字典,用items()直接遍历周数和对应比赛列表,代码更简洁 - 保留错误处理:保留try-except块,避免单个赛季抓取失败导致整个程序中断
内容的提问来源于stack exchange,提问作者WarSaw
相关产品推荐
相关产品推荐

