有没有办法一次性查找所有带有条件列表的标签?
例如,在此 HTML 中我想提取 <p>
标签和 <div data-type="b">
标签。
HTML
<div>
<h1>Chapter 1</h1>
<p>aaa</p>
<p>aaa</p>
<p>aaa</p>
<div>
<h1>Section 1</h1>
<p>bbb</p>
<p>bbb</p>
<p>bbb</p>
</div>
<div data-type="a">...</div>
<div data-type="a">...</div>
<div data-type="b">...</div>
...
</div>
所需输出
<p>aaa</p>
<p>aaa</p>
<p>aaa</p>
<p>bbb</p>
<p>bbb</p>
<p>bbb</p>
<div data-type="a">...</div>
<div data-type="a">...</div>
我当然可以:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
p_tags = soup.find_all('p')
div_tags = soup.find_all('div', {"data-type": "a"})
但我想做一些类似的事情:
p_and_div_tags = soup.find_all(['p', 'div_tag_with_attribute'])
有办法吗?
谢谢
最佳答案
如果您有 BS4 4.7.1 或更高版本,则可以使用 css 选择器。
代码:
from bs4 import BeautifulSoup
html='''<div>
<h1>Chapter 1</h1>
<p>aaa</p>
<p>aaa</p>
<p>aaa</p>
<div>
<h1>Section 1</h1>
<p>bbb</p>
<p>bbb</p>
<p>bbb</p>
</div>
<div data-type="a">...</div>
<div data-type="a">...</div>
<div data-type="b">...</div>
...
</div>'''
soup=BeautifulSoup(html,'html.parser')
items=soup.select('p,div[data-type="a"]')
print(items)
输出:
[<p>aaa</p>, <p>aaa</p>, <p>aaa</p>, <p>bbb</p>, <p>bbb</p>, <p>bbb</p>, <div data-type="a">...</div>, <div data-type="a">...</div>]
关于html - 如何通过标签或类一次查找多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59857819/