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

使用BeautifulSoup提取带colored类的table-main__odds的data-odd值

解决方法

方案1:合并已有两个标签列表

你已经分别获取了两类目标td标签,只需将两个列表的推导结果合并即可:

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://www.betexplorer.com/soccer/england/premier-league/results/'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')  # 指定解析器避免环境警告
odds_raw = soup.find_all("td", class_="table-main__odds")
fav_odds_raw = soup.find_all("td", class_="table-main__odds colored")

# 合并两类td的data-odd属性值
odds = [o.get('data-odd') for o in odds_raw] + [o.get('data-odd') for o in fav_odds_raw]

方案2:用CSS选择器一次性匹配所有目标标签

更简洁高效的方式是使用CSS选择器,直接匹配所有包含table-main__odds类的td元素(无论是否附带colored类):

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://www.betexplorer.com/soccer/england/premier-league/results/'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')

# 用CSS选择器选中所有含table-main__odds类的td
all_odds_td = soup.select('td.table-main__odds')
# 提取属性并过滤无data-odd的标签
odds = [td.get('data-odd') for td in all_odds_td if td.get('data-odd')]

补充说明

  • 方案1基于你现有代码修改,逻辑直接清晰;
  • 方案2通过CSS选择器简化了标签查找流程,减少冗余代码;
  • 指定解析器(如html.parser)可避免不同环境下的解析器兼容警告;
  • 加入if td.get('data-odd')判断,能过滤掉少数无目标属性的标签,避免列表中出现None值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:55:30