html - 如何通过标签或类一次查找多个元素

标签 html python-3.x web-scraping beautifulsoup

有没有办法一次性查找所有带有条件列表的标签?

例如,在此 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/

相关文章:

python - 使用selenium获取不同的属性值

python - 网页抓取 futbin.com

javascript - BX Slider 不会在浏览器窗口大小减小时重新计算宽度

html - 当里面的文本向右溢出时,CSS 会增加容器宽度吗?

html - 移动浏览器无法缩放响应式网站

python - 使用 bs4 webscraping 通过内容获取 HTML 类属性

javascript - 悬停时不发生 CSS -webkit-transform

python - 来自元组的任意嵌套字典

python - 如何在python中的while循环语句中使用迭代器

python - 默认可变参数的惯用方式