BeautifulSoup:查找与名称匹配一个标签或与属性匹配另一个标签的任何标签

时间:2020-01-09 06:14:03

标签: python beautifulsoup

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

有人可以为此提出建议吗?谢谢。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

如何将两个bs.find_all('h1') + bs.find_all(['div', attrs={'class': 'abc'})之类的结果串联起来?

相关问题