首页 > 解决方案 > BeautifulSoup:查找与一个标签匹配的任何标签,或按属性匹配另一个标签

问题描述

我想找到所有标签<h1>OR <div class='abc'>。我试过bs.find_all(['h1', 'div'], attrs={'class': 'abc'})了,但这会忽略<h1>标签:显然,该attrs参数将 AND 条件应用于搜索(意味着标签必须属于标签名称列表并且具有<h1>标签不符合的给定属性)。

任何人都可以建议解决这个问题吗?谢谢你。

标签: pythonbeautifulsoup

解决方案


也许你可以使用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>]

推荐阅读