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

Python Selenium爬虫如何提取class相同的主客队球队名称

足球赛事主客队名称提取方案

直接查找class为Nh的span标签会同时返回主、客队两个元素——两个队名标签共用这个class属性,没有结合层级关系或id特征做区分,自然无法单独提取主客队名称。

可行实现方法

两种方法都适配给出的页面结构,不需要依赖动态变化的赛事id前缀,稳定性更高:

  • 方法1:通过父容器class区分定位
    从HTML结构可以看到,主队名称的Nh标签外层包裹的span class为Lh,客队名称的Nh标签外层包裹的span class为Mh,先定位父容器再提取内部队名即可。
    如果你用BeautifulSoup解析Selenium返回的页面源码,参考代码如下:

    from bs4 import BeautifulSoup
    
    # 传入Selenium获取的页面源码初始化解析对象
    soup = BeautifulSoup(driver.page_source, "html.parser")
    
    # 定位主队、客队元素并提取文本
    home_team = soup.select_one("span.Lh span.Nh").get_text(strip=True)
    away_team = soup.select_one("span.Mh span.Nh").get_text(strip=True)
    
    match_result = f"{home_team} vs {away_team}"
    print(match_result)
    # 对应示例输出:Estudiantes Merida vs Universidad Central
    

    如果直接用Selenium原生选择器提取,不需要走BeautifulSoup解析,参考代码如下:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 加显式等待,等队名元素加载完成再提取,避免空报错
    wait = WebDriverWait(driver, 10)
    home_team = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "span.Lh span.Nh"))).text.strip()
    away_team = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "span.Mh span.Nh"))).text.strip()
    
    match_result = f"{home_team} vs {away_team}"
    
  • 方法2:通过id固定后缀匹配定位
    观察两个队名标签的id属性可以发现,不管赛事id前缀怎么变,主队id固定包含__match-row__home-team-name字段,客队id固定包含__match-row__away-team-name字段,用CSS属性包含选择器即可精准匹配,参考代码:

    # BeautifulSoup 写法
    home_team = soup.select_one('span[id*="__match-row__home-team-name"]').get_text(strip=True)
    away_team = soup.select_one('span[id*="__match-row__away-team-name"]').get_text(strip=True)
    
    # Selenium 写法
    home_team = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'span[id*="__match-row__home-team-name"]'))).text.strip()
    away_team = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'span[id*="__match-row__away-team-name"]'))).text.strip()
    

注意:提取前一定要加元素等待逻辑,等页面赛事模块渲染完成再执行提取操作,否则会出现找不到元素的报错。

内容的提问来源于stack exchange,提问作者Henrique Mazetti Ferraz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:54:21