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

使用BeautifulSoup爬虫时如何处理赔率缺失值问题

解决赔率缺失导致的数组长度不匹配问题

核心思路是按单个赛事维度处理赔率,逐个检查每种赔率类型对应的标签内容,遇到空文本就填充0或空值,确保每个赛事的赔率字段数量固定,不会因为部分标签无内容打乱关联关系。

替代原有批量获取逻辑

如果你之前是批量抓取所有tipoQuotazione_1标签的文本再拆分,这种方式在有缺失时必然会出错。改成针对每个赛事的独立容器处理:

# 先定位所有赛事的父容器(根据页面实际class调整,比如假设是'event-item')
event_containers = soup.find_all('div', class_='event-item')

for event in event_containers:
    # 提取赛事基本信息,比如对阵双方
    teams = event.find('div', class_='teams').get_text(strip=True)
    
    # 处理当前赛事的所有赔率
    odds_data = {}
    
    # 1X赔率(优先用属性定位,比nth-of-type更可靠)
    x1_odds_tag = event.select_one('p.tipoQuotazione_1[data-type="1x"]')
    odds_data['1X'] = x1_odds_tag.get_text(strip=True) if (x1_odds_tag and x1_odds_tag.get_text(strip=True)) else '0'
    
    # 12赔率
    x12_odds_tag = event.select_one('p.tipoQuotazione_1[data-type="12"]')
    odds_data['12'] = x12_odds_tag.get_text(strip=True) if (x12_odds_tag and x12_odds_tag.get_text(strip=True)) else '0'
    
    # X2赔率
    x2_odds_tag = event.select_one('p.tipoQuotazione_1[data-type="x2"]')
    odds_data['X2'] = x2_odds_tag.get_text(strip=True) if (x2_odds_tag and x2_odds_tag.get_text(strip=True)) else '0'
    
    # 大小球赔率
    overunder_odds_tag = event.select_one('p.tipoQuotazione_1[data-type="overunder"]')
    odds_data['大小球'] = overunder_odds_tag.get_text(strip=True) if (overunder_odds_tag and overunder_odds_tag.get_text(strip=True)) else '0'
    
    # 把赛事信息和赔率存起来,比如追加到列表
    print(f"{teams}: {odds_data}")

关键细节说明

  • 优先用属性定位:如果标签有data-type这类专属属性,别依赖nth-of-type,页面结构变动时后者更容易出错。
  • 双重判断:先检查标签是否存在,再检查文本是否非空(避免标签存在但全是空白字符的情况)。
  • 固定字段数量:不管某类赔率有没有值,每个赛事的odds_data都会包含所有预设字段,后续关联赛事和赔率时就不会出现长度不匹配的问题。

适配Selenium动态加载

如果页面是动态加载的,记得在解析前等待目标元素加载完成:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 等待所有赛事容器加载完成
WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.CLASS_NAME, 'event-item'))
)

# 再获取页面源码转成soup
soup = BeautifulSoup(driver.page_source, 'html.parser')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:50:23