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

使用Python和BeautifulSoup爬取表格时无法定位table标签及data-table类问题

问题排查与解决方案

根因分析

你碰到的是动态渲染类网站的典型爬取问题:

  • 目标网站的2020欧洲杯球员统计表格,并非写在初始HTML源码里,是浏览器加载完基础页面后,通过JavaScript异步拉取数据、动态生成后插入到页面DOM中的
  • 你当前用的urllib只能获取初始静态HTML,没有浏览器的JS执行环境,无法生成动态内容,因此解析后的soup里找不到对应table元素

可落地解决方法

方法一:使用支持JS渲染的爬取工具(入门友好)

用selenium模拟真实浏览器运行,自动执行页面JS生成完整内容,示例代码如下:

from bs4 import BeautifulSoup as soup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 配置无头模式,无需弹出浏览器窗口
chrome_opt = Options()
chrome_opt.add_argument("--headless=new")
chrome_opt.add_argument("--disable-blink-features=AutomationControlled")

target_url = "https://theanalyst.com/na/2021/06/euro-2020-player-stats"

# 初始化浏览器驱动,加载页面
driver = webdriver.Chrome(options=chrome_opt)
driver.get(target_url)
# 等待页面渲染完成
driver.implicitly_wait(3)

# 获取渲染完成后的完整HTML
full_html = driver.page_source
page_soup = soup(full_html, "html.parser")
driver.quit()

# 此时可正常定位目标table
stats_table = page_soup.find("table", class_="data-table")
print(stats_table)

运行前需完成依赖准备:

  • 执行命令安装selenium:pip install selenium
  • 本地安装Chrome浏览器,新版selenium会自动匹配对应驱动,无需手动下载

方法二:直接请求数据接口(性能更优)

打开浏览器开发者工具的「网络」面板,筛选「XHR/提取」类请求,刷新页面后找到返回球员统计数据的接口,直接请求该接口即可拿到JSON格式的原始数据,无需解析HTML,爬取效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 13:21:00