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

BeautifulSoup如何精准筛选class属性仅为table_body的标签

解决BeautifulSoup筛选仅包含指定单一class标签的方法

核心实现逻辑

你需要匹配的是class属性仅包含table_body单个类名的标签,利用BeautifulSoup会自动将class属性解析为类名列表的特性,直接判断标签的类名列表是否完全等于['table_body']即可,代码如下:

from bs4 import BeautifulSoup as soup
html = '''
<tr class="table_body notice inside ">1</tr>
<tr class="table_body notice inside ">2</tr>
<tr class="table_body">3</tr>
<tr class="table_body">4</tr>
'''
soup = soup(html, 'lxml')
# 正确写法:判断标签类名列表完全匹配仅含table_body的情况
res = soup.find_all(lambda tag: tag.name == 'tr' and tag.get('class') == ['table_body'])
print(res)

运行结果完全符合预期:

[<tr class="table_body">3</tr>, <tr class="table_body">4</tr>]

原方法失效原因说明

  • res1失效:class_='table_body'是默认的包含匹配规则,只要标签的类名列表中存在table_body就会命中,不会校验是否有其他类名
  • res2失效:endswith逻辑本身无法适配单类匹配需求,且示例中多类标签的class属性末尾带有空格,也无法触发匹配判定
  • res3失效:lambda逻辑写反,你设置的条件是class值不等于多类的长字符串,单类标签也满足该条件,所以会返回所有符合条件的标签

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:45:08