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

如何用Python爬取Oddschecker网站的两队均进球(BTTS)赔率

Oddschecker BTTS板块赔率爬取解决方案

问题根源

  • 你当前用urlopen只能拿到静态初始HTML,Oddschecker的所有赔率板块都是客户端JS动态渲染的,初始页面里根本没有你要找的赔率节点,所以你用索引硬取第13个元素要么直接报错要么拿到空内容。
  • 站点用了CSS Modules,类名后面的随机后缀(比如_mgnb13w)每次版本更新都会变,硬写死类名+索引的方式完全不可靠,页面结构稍微调整就失效。

可行实现方案

用支持JS渲染的工具模拟浏览器加载页面,等内容完全渲染后通过稳定的文本特征定位板块,不要依赖带哈希的动态类名。下面给出Playwright的实现示例:

1. 安装依赖

pip install playwright
playwright install chromium

2. 示例代码

from playwright.sync_api import sync_playwright

def get_btts_odds(match_url):
    with sync_playwright() as p:
        # 启动无头浏览器
        browser = p.chromium.launch(headless=True)
        page = browser.new_page(user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
        page.goto(match_url, wait_until="networkidle")
        
        # 定位Both Teams To Score板块,通过文本特征匹配
        btts_market = page.locator("div[class*='MarketWrapper']", has_text="Both Teams To Score").first
        # 等待板块加载完成
        btts_market.wait_for(state="visible")
        
        # 提取是/否两个选项的赔率
        odds = {}
        # 定位所有赔率按钮
        odds_buttons = btts_market.locator("button[data-odds]").all()
        for btn in odds_buttons:
            option = btn.get_attribute("aria-label").split(" ")[0]
            odd_value = btn.get_attribute("data-odds")
            odds[option] = odd_value
        
        browser.close()
        return odds

# 测试调用
url = 'https://www.oddschecker.com/football/spain/la-liga-primera/levante-v-rayo-vallecano/winner'
print(get_btts_odds(url))

补充说明

  • 如果你需要提取多家博彩公司的对应赔率,可以修改定位逻辑,查找板块下对应博彩公司列的td节点的赔率属性即可。
  • 不要高频请求站点,可适当加延时避免被封。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:36:00