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

使用Python BeautifulSoup爬取赛事主客队概率遇阻求助

解决BayesBet网站赛事概率数据爬取问题

针对你爬取https://bayesbet.everettsprojects.com/时遇到的主队/客队概率获取问题,结合类名重复、BeautifulSoup和Selenium的使用痛点,给你以下具体解决方案:

核心思路:利用上下文限定元素范围

网站类名重复是常见问题,关键是不要全局查找元素,而是先定位单个赛事条目容器,再在容器内部查找概率相关元素,这样就能避开其他赛事的重复类名干扰。


BeautifulSoup 实现方案

假设你已经能拿到赛事条目容器(比如通过.event-item类,你可以根据实际HTML结构替换),在每个容器内部定位概率:

from bs4 import BeautifulSoup
import requests

url = "https://bayesbet.everettsprojects.com/"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 遍历所有赛事条目
for event in soup.select(".event-item"):  # 替换成你实际用的赛事容器选择器
    # 方法1:通过文本标签定位(如果页面有"Home Probability"这类明确标签)
    home_label = event.find("span", string="Home Probability")
    if home_label:
        home_prob = home_label.find_next_sibling("span").text.strip()
    away_label = event.find("span", string="Away Probability")
    if away_label:
        away_prob = away_label.find_next_sibling("span").text.strip()
    
    # 方法2:通过类名索引(如果概率元素类名相同但顺序固定)
    prob_elements = event.select(".probability-value")  # 替换成实际概率值的类名
    if len(prob_elements) >= 2:
        home_prob = prob_elements[0].text.strip()
        away_prob = prob_elements[1].text.strip()
    
    # 输出或保存数据
    print(f"主队概率: {home_prob}, 客队概率: {away_prob}")

Selenium 实现方案

如果页面是动态加载(比如概率数据通过JS渲染),用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

driver = webdriver.Chrome()
driver.get("https://bayesbet.everettsprojects.com/")

# 等待赛事条目全部加载完成
WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".event-item"))
)

events = driver.find_elements(By.CSS_SELECTOR, ".event-item")
for event in events:
    # 方法1:相对XPath定位(精准匹配文本标签)
    home_prob = event.find_element(
        By.XPATH, ".//span[text()='Home Probability']/following-sibling::span"
    ).text.strip()
    away_prob = event.find_element(
        By.XPATH, ".//span[text()='Away Probability']/following-sibling::span"
    ).text.strip()
    
    # 方法2:类名索引(如果概率元素顺序固定)
    prob_values = event.find_elements(By.CSS_SELECTOR, ".prob-value")
    if len(prob_values) >= 2:
        home_prob = prob_values[0].text.strip()
        away_prob = prob_values[1].text.strip()
    
    print(f"主队概率: {home_prob}, 客队概率: {away_prob}")

driver.quit()

额外建议

  1. 先检查浏览器开发者工具的「网络」标签,看看是否有直接返回赛事数据的API接口,直接请求API比解析HTML效率高得多;
  2. 如果用requests拿不到动态加载的数据,要么用Selenium渲染页面,要么抓包分析AJAX请求的参数,模拟请求;
  3. 定位元素时,尽量用组合选择器(比如父容器类名+子元素类名),减少重复匹配的可能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:10:31