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

如何修正Python代码以爬取ESPN网站第5周所有NFL赛事盘口数据至Pandas DataFrame

解决ESPN NFL盘口数据爬取仅返回单场的问题

嘿,我看你遇到了只爬取到第一场NFL赛事盘口数据的问题,这就来帮你搞定它!

问题根源

你的原代码里用了soup.find('section', {'class':"Card"}),这个方法只会抓取页面中第一个带有Card类的区块。但ESPN的NFL盘口页面里,每一组赛事的数据都被放在独立的Card区块里,所以只取第一个当然只能拿到第一场的数据。

修复后的完整代码

import pandas as pd # 数据分析库
import requests # 请求处理库
from bs4 import BeautifulSoup # HTML解析库

# 获取页面HTML响应
url = "https://www.espn.com/nfl/lines"
response = requests.get(url)

# 解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser')

# 找到页面中所有包含赛事数据的Card区块
all_game_cards = soup.find_all('section', {'class': "Card"})

# 初始化列表存储每个赛事区块的DataFrame
game_data_frames = []

# 遍历每个Card区块,提取表格数据
for card in all_game_cards:
    # 从当前Card中读取HTML表格
    table_data = pd.read_html(str(card))
    # 只保留包含有效赛事数据的表格(过滤掉无数据的Card)
    if table_data:
        game_data_frames.append(table_data[0])

# 合并所有赛事数据为一个完整的DataFrame
final_nfl_lines_df = pd.concat(game_data_frames, ignore_index=True)

# 打印结果(可以用head()先看前几行,或者直接打印全部)
print(final_nfl_lines_df.head(10))

关键修改点说明

  • 用find_all替代find:一次性获取页面中所有的Card区块,而不是仅第一个
  • 遍历+过滤:逐个处理每个Card,只保留包含有效表格数据的部分(避免页面中其他非赛事Card干扰)
  • 合并DataFrame:用pd.concat把所有小的赛事表格合并成一个完整的DataFrame,这样就能拿到第5周所有赛事的盘口数据了

运行这段代码后,你就能得到包含所有NFL第5周赛事的盘口数据的DataFrame啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:52:42