如何使用BeautifulSoup筛选排除指定class值的所有tr标签
解决方案
BeautifulSoup 有两种常用实现方式,可根据你使用的版本选择:
方法1:lambda 表达式过滤(全版本兼容)
这种方式适配所有 BeautifulSoup 版本,不需要考虑版本限制:
# 排除class属性值为"NOT WANTED"的tr标签 x = whatever.find_all('tr', class_=lambda c: c != 'NOT WANTED')
如果你的场景中存在没有class属性的tr标签,且也需要保留这类标签,可以改成下面的写法:
x = whatever.find_all('tr', class_=lambda c: c is None or c != 'NOT WANTED')
如果你习惯使用旧版本的findAll写法,直接把find_all替换为findAll即可正常生效。
方法2:CSS :not 伪类选择器(BeautifulSoup 4.7.1及以上版本支持)
新版本的BeautifulSoup支持标准CSS伪类选择器,写法更简洁:
# 严格匹配class属性值为"NOT WANTED"的标签并排除 x = whatever.select('tr:not([class="NOT WANTED"])')
如果你需要排除的是同时带有NOT和WANTED两个类的tr标签(HTML中class属性空格分隔代表多个独立类),可以改成:
x = whatever.select('tr:not(.NOT.WANTED)')
内容的提问来源于stack exchange,提问作者Vuotelin
相关产品推荐
相关产品推荐

