如何在未知属性名时筛选同时含指定属性值的HTML标签
提取同时包含指定属性值的HTML标签
你可以通过给BeautifulSoup的find_all()方法传入自定义判断函数,筛选出同时包含属性值ATTR1和ATTR2的标签。以下是完整实现代码:
from bs4 import BeautifulSoup page_content = '''<a href="ATTR1">text1</a> <div class="random_value" type="ATTR2">text2</div> <script class="ATTR1" id="ATTR2">text3</script> <span class="random_value" id="ATTR2">text5</span>''' soup = BeautifulSoup(page_content, 'html.parser') def has_both_attr_values(tag): # 获取标签所有属性的值组成的列表 attr_values = list(tag.attrs.values()) # 检查ATTR1和ATTR2是否同时存在于属性值中 return "ATTR1" in attr_values and "ATTR2" in attr_values # 筛选符合条件的标签 target_tags = soup.find_all(has_both_attr_values) # 输出结果 for tag in target_tags: print(tag)
代码说明
- 自定义函数
has_both_attr_values会接收每个标签作为参数:- 通过
tag.attrs.values()获取该标签所有属性的取值,转成列表后方便判断 - 直接检查
ATTR1和ATTR2是否同时存在于这些属性值中,返回布尔值作为筛选依据
- 通过
- 执行后会输出符合条件的标签:
<script class="ATTR1" id="ATTR2">text3</script>
内容的提问来源于stack exchange,提问作者Econlover
相关产品推荐
相关产品推荐

