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

如何用BeautifulSoup筛选数据?解决NFL赛程爬取列数不一致问题

解决NFL赛程爬取的字段缺失与赛事筛选问题

问题分析

你爬取ESPN NFL赛程时遇到的核心问题:未开赛赛事带有「time」列,赛事开始后网站会移除该列,导致爬取的每行字段数量不一致,无法正常构造DataFrame;同时需要筛选出仅未开赛的赛事,避免混入已开赛/结束的条目。

解决方案思路

ESPN的赛程表格中,未开赛的赛事行包含date__col类的时间元素,而已开赛/结束的赛事会将该列替换为比分等内容。因此可以通过BeautifulSoup判断每行是否存在date__col元素,筛选出未开赛赛事;同时按单场赛事为单位爬取字段,确保每条数据的字段数一致。

修改后的代码实现

import requests
from bs4 import BeautifulSoup
import pandas as pd

link = "https://www.espn.com/nfl/schedule/_/week/1/year/2022/seasontype/3"
page = requests.get(link)
soup = BeautifulSoup(page.content, "html.parser")

# 定位所有赛程表格
nfl_tables = soup.find_all('div', class_='ResponsiveTable')

# 存储未开赛赛事数据
upcoming_games = []

for table in nfl_tables:
    # 遍历表格内的每一行赛事
    game_rows = table.find_all('tr', class_='Table__TR')
    for row in game_rows:
        # 判断是否为未开赛赛事(存在时间列则为未开赛)
        time_col = row.find('td', class_='date__col Table__TD')
        if not time_col:
            # 无时间列,说明赛事已开始/结束,直接跳过
            continue
        
        # 提取单场赛事的各项信息
        game_time = time_col.text.strip()
        # 提取客队、主队信息
        team_cols = row.find_all('td', class_='events__col Table__TD')
        visitor_team = team_cols[0].text.strip() if team_cols else ""
        home_team = team_cols[1].text.strip() if len(team_cols)>=2 else ""
        # 提取场地信息
        location_col = row.find('td', class_='location__col Table__TD')
        game_location = location_col.text.strip() if location_col else ""
        
        # 将单场数据存入列表
        upcoming_games.append({
            "时间": game_time,
            "客队": visitor_team,
            "主队": home_team,
            "场地": game_location
        })

# 构造结构一致的DataFrame
df = pd.DataFrame(upcoming_games)
print(df)

代码说明

  • 按单场赛事行为单位遍历,先判断是否存在时间列,直接跳过已开赛赛事,从根源避免字段缺失问题
  • 每个字段提取都做了边界判断,避免索引越界报错
  • 最终生成的DataFrame仅包含未开赛赛事,所有条目字段数完全一致,不会出现构造失败的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:50:16