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

如何修改Python爬虫代码抓取网页第二个表格的门将统计数据

NHL数据爬取问题解决方案

问题背景

需要从2021-2022赛季NHL联赛统计页面爬取球员数据,现有代码可正常爬取滑手统计数据,但将CSS选择器修改为.goalie-stats尝试爬取门将数据时运行报错。

原有可正常爬取滑手数据的代码如下:

import requests
import pandas as pd
from bs4 import BeautifulSoup

dfs = []
for page in range(1,10):
    url = f"https://www.eliteprospects.com/league/nhl/stats/2021-2022?sort=tp&page={page}"
    print(f"Loading {url=}")
    soup = BeautifulSoup(requests.get(url).content, "html.parser")

    df = (
        pd.read_html(str(soup.select_one(".player-stats")))[0]
        .dropna(how="all")
        .reset_index(drop=True)
    )
    dfs.append(df)

df_final = pd.concat(dfs).reset_index(drop=True)
print(df_final)
df_final.to_csv("data.csv", index=False)

报错原因

修改选择器后报错的核心原因是带sort=tp参数的请求返回的HTML中,根本不存在class为goalie-stats的表格元素:

  • 站点的滑手、门将数据分模块独立加载,sort=tp是滑手总得分排序参数,请求该类页面时只会渲染滑手统计表(.player-stats)
  • 门将数据需要使用门将专属的排序参数发起请求,页面才会渲染门将统计表(.goalie-stats),常用的门将排序参数有svp(扑救率)、gaa(场均失球)、wins(胜场)、so(零封场次)
  • 两类数据的分页互相独立,不能直接复用滑手的分页遍历逻辑

可正常爬取门将数据的修改后代码

import requests
import pandas as pd
from bs4 import BeautifulSoup

goalie_dfs = []
# 以扑救率排序为例遍历门将数据页
for page in range(1, 15):
    url = f"https://www.eliteprospects.com/league/nhl/stats/2021-2022?sort=svp&page={page}"
    print(f"正在加载: {url=}")
    resp = requests.get(url)
    resp.raise_for_status()
    soup = BeautifulSoup(resp.content, "html.parser")

    goalie_table = soup.select_one(".goalie-stats")
    # 无表格时终止遍历
    if not goalie_table:
        print(f"第{page}页无更多门将数据,爬取结束")
        break

    df = (
        pd.read_html(str(goalie_table))[0]
        .dropna(how="all")
        .reset_index(drop=True)
    )
    goalie_dfs.append(df)

df_goalies = pd.concat(goalie_dfs).reset_index(drop=True)
print(df_goalies)
df_goalies.to_csv("nhl_2021-2022_goalies.csv", index=False)

补充说明

  • 如果需要按其他维度排序门将数据,直接替换url中sort=后的参数即可
  • 如果需要同时爬取滑手和门将数据,分开编写两个遍历循环即可,单次请求只会返回对应排序模块的单个表格,不要尝试在同一个页面响应中同时解析两个表格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:39:50