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

Python根据背景色爬取足球赛事获胜赔率及赛事名去重问题求助

解决足球赛事获胜赔率爬取的重复输出与元素定位问题

首先,我们来拆解你遇到的两个核心问题:灰色背景赔率定位失败和赛事重复输出,然后一步步给出修正方案。

问题1:为什么用背景色定位元素返回空列表?

你之前的代码错误地将res_c当作了标签名,而实际上它是元素的class属性。正确的写法应该是指定标签为span,并匹配对应的class和style:

# 错误写法
soup.find_all('res_c', {"style":"background-color:#636364"})

# 正确写法:指定span标签,匹配class包含res_c且style符合条件的元素
soup.find_all('span', class_=lambda c: c and 'res_c' in c, style=lambda s: s and 'background-color:#636364' in s)

另外要注意:如果页面的灰色背景是通过CSS类而非内联style设置的,你可能需要检查元素的完整class列表,比如是否有专门标识获胜结果的类名,再调整匹配逻辑。

问题2:如何避免赛事重复输出?

你当前代码的重复输出是因为逻辑混乱:每次循环都创建新的match列表,且没有有效去重逻辑。最简洁的解决方式是用字典存储赛事与赔率——字典的键是唯一的,天然避免重复。

修正后的完整代码

import requests
from bs4 import BeautifulSoup

url = 'https://www.pronosoft.com/fr/parions_sport/resultats-parions-sport-plein-ecran.htm?date=07-02-2020'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')

# 用字典存储赛事名称(键)和对应的获胜赔率(值),自动去重
match_odds = {}

# 筛选所有包含足球赛事标识的行
for row in soup.select('tr:has(span.sport.football)'):
    # 提取干净的赛事名称
    match_name_tag = row.find('a', class_='infos')
    if not match_name_tag:
        continue  # 跳过没有赛事名称的行
    match_name = match_name_tag.get_text(strip=True)
    
    # 如果赛事已经记录过,直接跳过
    if match_name in match_odds:
        continue
    
    # 找到灰色背景的获胜赔率
    winning_odd_tag = row.find(
        'span',
        class_=lambda c: c and 'res_c' in c,
        style=lambda s: s and 'background-color:#636364' in s
    )
    
    if winning_odd_tag:
        winning_odd = winning_odd_tag.get_text(strip=True)
        match_odds[match_name] = winning_odd

# 输出最终结果:每个赛事仅显示一次
for match, odd in match_odds.items():
    print(f"{odd} {match}")

代码关键说明

  1. 精准筛选足球赛事行:用soup.select('tr:has(span.sport.football)')直接定位所有包含足球标识的行,避免处理其他运动赛事。
  2. 自动去重:通过字典match_odds的键唯一性,确保每个赛事只被记录一次。
  3. 干净的文本提取:用get_text(strip=True)去除赛事名称和赔率中的多余换行、空格,让结果更整洁。
  4. 可靠的赔率定位:结合class和style双重匹配,确保找到的是灰色背景的获胜赔率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:17:38