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

如何使用BeautifulSoup提取FIBA赛事页面中data-module-group下DIV内的表格数据?

我帮你分析下这个问题,你遇到的情况很典型——这类体育赛事页面常常用动态加载(AJAX/ESI模块)来渲染内容,直接用BeautifulSoup静态解析肯定拿不到表格数据。下面给你几个可行的解决方向:

解决方向

1. 直接抓取AJAX/ESI请求的数据源

你看到的tab_ajax_content和@moduleident(...)提示了内容是通过ESI(Edge Side Includes)或者AJAX动态注入的。步骤如下:

  • 打开浏览器开发者工具(F12),切换到Network面板
  • 刷新页面,在过滤栏选择XHR或者Fetch,同时可以搜索关键词如boxscore、game
  • 找到返回表格HTML或JSON数据的请求,查看它的请求URL和参数(比如你看到的d45eda71-7aac-4017-b055-e70f29b1d352这类模块ID很可能是请求参数的一部分)
  • 直接用Python的requests库请求这个接口,就能拿到原始的表格数据,不需要解析整个页面的静态HTML

2. 使用浏览器渲染工具处理动态内容

如果找不到对应的API接口,可以用模拟浏览器渲染的工具,让页面完全加载后再抓取:

  • 用selenium配合ChromeDriver/GeckoDriver:启动浏览器,访问目标页面,等待jet-game-boxscore元素加载完成,然后获取页面的page_source再用BeautifulSoup解析
  • 更轻量的选择是playwright,它自带浏览器驱动,API更简洁,同样能等待元素加载后抓取渲染后的HTML

示例代码(selenium):

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup

driver = webdriver.Chrome()
driver.get("https://www.fiba.basketball/eurobasket/2022/qualifiers/game/2202/Turkey-Croatia#|tab=boxscore")

# 等待boxscore模块加载完成
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.ID, "jet-game-boxscore")))

# 获取渲染后的页面源码
soup = BeautifulSoup(driver.page_source, "html.parser")
boxscore_table = soup.find("div", id="jet-game-boxscore").find("table")

driver.quit()

3. 解析data-module属性中的加载地址

页面里的data-module-name="GAME_BOX_SCORE"和@moduleident(...)可能指向模块的加载URL。你可以尝试提取@moduleident()里的路径(比如/en/Module/d45eda71-7aac-4017-b055-e70f29b1d352/adad72a7-4113-4201-ae49-5b994ca0158b),拼接成完整的URL,直接请求这个地址就能拿到模块的HTML内容,里面应该包含你要的表格。

可行性确认

这个需求完全可以实现,因为动态加载的内容本质上还是通过HTTP请求获取的,只要找到对应的数据源或者让浏览器完成渲染,就能拿到表格数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 21:02:29