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

如何抓取网站动态表格?Sofascore球员统计表格爬取求助

解决Sofascore球员统计表格抓取问题

原代码核心问题分析

  1. 动态类名定位不可靠:你使用的sc-c347313f-8.kLmLmP是前端框架生成的动态类名,页面刷新或网站更新后会失效,无法稳定定位表格元素。
  2. 未触发表格加载:Player Statistics表格位于页面底部,不滚动到该区域时,页面不会主动加载表格内容。
  3. 忽略前置交互:网站存在Cookie授权弹窗,不处理会阻塞后续元素的渲染和定位。
  4. 等待条件不合理:presence_of_element_located仅确认元素存在于DOM,但表格可能还未完成渲染,应使用确认元素可见的等待条件。

修改后的可运行代码

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 selenium.webdriver.common.action_chains import ActionChains
import pandas as pd

driver = webdriver.Chrome()
url = "https://www.sofascore.com/tournament/football/azerbaijan/misli-premier-league/709#id:64075"

try:
    driver.get(url)
    wait = WebDriverWait(driver, 30)
    
    # 处理Cookie授权弹窗(若存在)
    try:
        accept_cookie_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Accept')]")))
        accept_cookie_btn.click()
    except:
        pass  # 无弹窗则跳过
    
    # 滚动到Player Statistics区域,触发表格加载
    player_stats_title = wait.until(EC.visibility_of_element_located((By.XPATH, "//h2[text()='Player Statistics']")))
    ActionChains(driver).move_to_element(player_stats_title).perform()
    
    # 等待表格可见,通过标题关联的父容器定位,避免依赖动态类
    table = wait.until(EC.visibility_of_element_located((By.XPATH, "//div[contains(@class, 'sc-c347313f-0')]//table")))
    
    # 等待所有表格行加载完成
    rows = wait.until(EC.presence_of_all_elements_located((By.XPATH, ".//tr")))
    
    table_data = []
    for row in rows:
        # 同时获取表头(th)和数据单元格(td)
        cells = row.find_elements(By.XPATH, ".//td | .//th")
        row_data = [cell.text.strip() for cell in cells if cell.text.strip()]
        if row_data:
            table_data.append(row_data)
    
    # 整理表头与数据,生成规范DataFrame
    df = pd.DataFrame(table_data[1:], columns=table_data[0])
    print("抓取到的球员统计数据:")
    print(df)
    df.to_csv("player_statistics.csv", index=False)

finally:
    driver.quit()

关键改动说明

  • 稳定定位逻辑:通过Player Statistics标题文本锁定目标区域,再查找下方表格,彻底摆脱对动态类名的依赖。
  • 强制触发加载:通过滚动到标题位置,触发页面加载底部的表格内容。
  • 交互阻塞处理:增加Cookie弹窗处理逻辑,避免页面交互阻塞后续操作。
  • 优化等待策略:使用visibility_of_element_located确保表格可见,presence_of_all_elements_located等待所有行加载完成,避免抓取不完整数据。
  • 规范数据结构:将第一行表头与后续数据行分离,生成结构规范的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:21:14