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

Web Scraping中IF语句输出错误:Jimmy Butler数据提取失败

Jimmy Butler数据爬取问题:错误原因与修复方案

一、IF分支未触发的核心原因

你的代码始终进入else分支,是因为行匹配逻辑完全错误:

  • 在Jimmy Butler的个人页面中,per_game表格的每行<th>元素显示的是赛季年份(如2022-23),而非球员名字。整个表格里的所有行都是Jimmy的赛季数据,根本不存在行<th>文本为Jimmy Butler的情况,所以jimmy_butler_row永远为None。

此外,代码还存在索引使用错误:stats[22.9]这种用浮点数当列表索引的写法完全不合法,列表索引必须是整数,就算找到行也会直接报错。

二、HTML数据提取的正确流程

  1. 先确认页面结构:打开目标URL,右键查看页面源码,定位数据所在的表格ID、行/列的标识规则(比如个人页面的表格行都是该球员的数据,无需匹配名字)。
  2. 请求并解析页面:用requests获取页面内容,BeautifulSoup指定解析器解析HTML。
  3. 定位目标行:如果是个人页面,直接遍历表格行;如果是球队页面,才需要匹配球员名字对应的行。
  4. 提取目标数据:通过整数索引对应列的位置,或通过列的data-stat属性精准定位(更可靠)。

三、修正后的可运行代码

import requests
from bs4 import BeautifulSoup

# Jimmy Butler的个人数据页面
url = "https://www.basketball-reference.com/players/b/butleji01.html"

# 发送请求并解析页面
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")

# 定位场均数据表格
per_game_table = soup.find("table", id="per_game")
if not per_game_table:
    print("场均数据表格未找到")
    exit()

# 遍历赛季行,提取2022-23赛季的数据(可根据需求修改赛季)
target_row = None
for row in per_game_table.find("tbody").find_all("tr"):
    # 跳过空的分隔行
    if not row.find("td"):
        continue
    # 获取赛季名称
    season = row.find("th").text.strip()
    if season == "2022-23":
        target_row = row
        break

if target_row:
    # 方式1:通过data-stat属性精准提取数据(推荐,不受列顺序变化影响)
    pts = target_row.find("td", {"data-stat": "pts"}).text
    ast = target_row.find("td", {"data-stat": "ast"}).text
    fg_pct = target_row.find("td", {"data-stat": "fg_pct"}).text
    ft_pct = target_row.find("td", {"data-stat": "ft_pct"}).text

    # 存储并打印数据
    jimmy_stats = {
        "场均得分(PTS)": pts,
        "场均助攻(AST)": ast,
        "投篮命中率(FG%)": fg_pct,
        "罚球命中率(FT%)": ft_pct
    }

    print("Jimmy Butler 2022-23赛季场均数据:")
    for stat_name, value in jimmy_stats.items():
        print(f"{stat_name}: {value}")
else:
    print("目标赛季数据未找到")

额外说明

  • 推荐用data-stat属性提取数据:表格的每个<td>都有data-stat属性(如data-stat="pts"对应得分),这种方式不受表格列顺序调整的影响,比索引更稳定。
  • 若要提取其他迈阿密本土球队球员数据,只需替换URL为对应球员的个人页面,或在球队页面中通过匹配球员名字所在的行来提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:18:12