python - BeautifulSoup:查找与一个标签匹配的任何标签,或按属性匹配另一个标签
问题描述
我想找到所有标签<h1>
OR <div class='abc'>
。我试过bs.find_all(['h1', 'div'], attrs={'class': 'abc'})
了,但这会忽略<h1>
标签:显然,该attrs
参数将 AND 条件应用于搜索(意味着标签必须属于标签名称列表并且具有<h1>
标签不符合的给定属性)。
任何人都可以建议解决这个问题吗?谢谢你。
解决方案
也许你可以使用select。
from bs4 import BeautifulSoup as bs
from io import StringIO
data = """<html>
<body>
<h1>Test 1</h1>
<h2>Test 2</h2>
<div class='abc'><p>Test 3</p></div>
</body>
</html>"""
soup = bs(StringIO(data), 'html.parser')
print(soup.select('h1,div[class="abc"]'))
print(soup.find_all(['h1', 'div'], attrs={'class' : 'abc'}))
输出
[<h1>Test 1</h1>, <div class="abc"><p>Test 3</p></div>]
[<div class="abc"><p>Test 3</p></div>]
推荐阅读
- scala - 在 Spark 中读取最后一列作为值数组的 CSV(并且值在括号内并用逗号分隔)
- c# - 非泛型方法'Dictionary
.Add(Type, Type)' 不能与类型参数一起使用 - spring - LocalDateTime 在客户端转换为 OffsetDateTime
- http - 在 Arduino 中向 Google Script 发送 HTTP 请求
- guava - CacheBuilder 使用番石榴缓存查询结果
- python - 如何从大型 CSV 文件中删除重复项?最好在 r 或 python 中
- sql - SQL Server - 更新连接 - 在 on 子句中设置特定值
- asp.net - 用户只能在列表中选择一项
- agens-graph - 如何在 AgensGraph 上删除“GRAPH”?
- angular - Angular - 如何使用自定义的 primeNG 图标