Python中如何过滤bs4.element.ResultSet里含spacer类的tr元素
解决方案
方法1:查找tr时直接过滤(推荐,效率更高)
直接在调用find_all时就排除类为spacer的tr,不需要后续二次过滤:
# 替换原来的all_trs赋值语句即可 all_trs = metacritic_soup.find_all('tr', class_=lambda c: c is None or 'spacer' not in c)
这里的lambda判断逻辑是:如果tr没有class属性,直接保留;如果有class属性,排除包含spacer的元素。
方法2:对已获取的ResultSet进行过滤
如果你已经拿到了all_trs,不想修改之前的查找逻辑,可以用列表推导式过滤:
filtered_trs = [tr for tr in all_trs if 'spacer' not in tr.get('class', [])]
这里用tr.get('class', [])是为了兼容没有class属性的tr,如果直接访问tr['class'],遇到无class的元素会抛出KeyError,默认返回空列表可以避免报错。
内容的提问来源于stack exchange,提问作者Canovice
相关产品推荐
相关产品推荐

