使用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
相关产品推荐
相关产品推荐

