美丽汤:查找按名称匹配一个标签或按属性匹配另一个标签的任何标签



我想找到所有<h1><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>]

bs.find_all('h1') + bs.find_all(['div', attrs={'class': 'abc'})这样连接两个结果怎么样?

最新更新