关于使用BeautifulSoup提取指定标签文本的技术咨询
关于使用BeautifulSoup提取指定标签文本的技术咨询
嘿,我来帮你搞定这个提取百分比文本的需求!你要忽略带class="label-negative"的<span>,只抓带有特定颜色样式的<span>里的数值,对吧?结合你已经拿到的cont集合,咱们可以这么做:
首先,你已经通过soup.find_all获取了目标<td>元素的列表,接下来只需要逐个遍历这些<td>,在里面筛选符合条件的<span>就行。
基础实现代码
直接针对你提到的两个颜色值做精准匹配,同时排除掉带有label-negative类的span:
# 遍历每个拿到的td元素 for td in cont: # 筛选出符合颜色样式且不是label-negative的span target_spans = td.find_all( "span", # 匹配指定的颜色样式 style=lambda val: val and (val == "color: #3F8539" or val == "color: #A9CF54"), # 排除带有label-negative类的span class_=lambda val: val != "label-negative" ) # 提取每个符合条件的span文本 for span in target_spans: # 去除文本前后的空白字符 percent_value = span.get_text(strip=True) print(percent_value) # 这里可以换成你需要的存储或处理逻辑
更鲁棒的版本(应对样式里的空格/额外字符)
有时候网页里的style属性可能会有多余空格或者分号,比如color: #3F8539;,这时候用正则匹配会更稳妥:
import re # 编译正则表达式,匹配两种颜色,忽略空格和大小写 style_regex = re.compile(r'color:\s*(#3F8539|#A9CF54)', re.IGNORECASE) for td in cont: target_spans = td.find_all( "span", # 用正则检查style是否包含目标颜色 style=lambda val: val and style_regex.search(val), class_=lambda val: val != "label-negative" ) for span in target_spans: percent_value = span.get_text(strip=True) print(percent_value)
这样就能精准提取到你想要的百分比文本啦,完全避开了不需要的label-negative标签~
备注:内容来源于stack exchange,提问作者Rizal
相关产品推荐
相关产品推荐

