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

如何用Selenium按类名文本筛选元素?PGA赔率爬取求助

解决Bovada PGA巡回赛「Outright Live」赔率筛选与DataFrame生成问题

核心问题分析

你之前的代码全局抓取所有类别的元素,没有建立「赔率类别」和「对应选手/赔率」的关联,导致无法精准筛选目标内容。要解决这个问题,关键是先定位到「Outright Live」的区块,再在该区块内抓取对应的选手和赔率数据。

修正后的代码

import pandas as pd
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

url = "https://www.bovada.lv/sports/golf/pga-tour"

# 初始化浏览器
browser = webdriver.Chrome()
browser.get(url)

# 显式等待页面加载,比implicitly_wait更可靠
wait = WebDriverWait(browser, 10)

try:
    # 定位到「Outright Live」的赔率区块:先找到对应的market-name元素,再获取其父容器
    outright_live_market = wait.until(
        EC.presence_of_element_located(
            (By.XPATH, "//div[contains(@class, 'market-name') and text()='Outright Live']/../..")
        )
    )

    # 在该区块内抓取选手和赔率
    players = outright_live_market.find_elements(By.CLASS_NAME, "outcomes")
    odds = outright_live_market.find_elements(By.CLASS_NAME, "bet-price")

    # 整理数据:确保选手和赔率数量匹配
    data = []
    event_title = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "market-header"))).text
    for player, odd in zip(players, odds):
        data.append({
            "赛事": event_title,
            "选手": player.text.strip(),
            "赔率": odd.text.strip()
        })

    # 生成DataFrame
    df = pd.DataFrame(data)
    print(df)

finally:
    # 关闭浏览器
    browser.quit()

关键优化点

  • 精准定位区块:用XPath找到文本为「Outright Live」的market-name元素,然后通过层级定位到包含该类别所有选手和赔率的父容器,确保只抓取目标类别的数据。
  • 显式等待:使用WebDriverWait替代隐式等待,避免因页面动态加载导致的元素找不到问题。
  • 数据关联:在目标区块内抓取子元素,自然建立了「类别-选手-赔率」的关联,不会混进其他类别的数据。
  • 资源清理:用try...finally确保浏览器会被关闭,避免资源泄漏。

可能的调整点

如果XPath定位父容器失败,可以检查页面的HTML结构,调整XPath层级(比如把/../..改成/parent::div/parent::div更清晰)。另外,如果页面需要滚动才能看到「Outright Live」区块,可以在定位前添加滚动代码:

# 滚动到页面底部,触发动态加载
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
wait.until(EC.presence_of_element_located((By.CLASS_NAME, "market-name")))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:35:50