Html 如何一次按标记或类查找多个元素

Html 如何一次按标记或类查找多个元素,html,python-3.x,web-scraping,beautifulsoup,Html,Python 3.x,Web Scraping,Beautifulsoup,有没有办法一次找到所有带有条件列表的标签 例如,在这个HTML中,我想提取标记和标记 HTML <div> <h1>Chapter 1</h1> <p>aaa</p> <p>aaa</p> <p>aaa</p> <div> <h1>Section 1</h1>

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

例如,在这个HTML中,我想提取
标记和
标记

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_and_div_tags = soup.find_all(['p', 'div_tag_with_attribute'])
有办法吗

谢谢

您可以尝试:


def func(标签):
在tag.name和tag.has_attr('data-type')中返回'div'
汤。全部找到(['p',func])

输出

<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>

[<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>,
 <div data-type="b">...</div>]
[aaa

, aaa, aaa, bbb

, bbb

, bbb

, ..., ..., ...]
如果您拥有BS4.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>]
从bs4导入美化组
html=“”
第一章
aaa

aaa

aaa

第一节 bbb

bbb

bbb

... ... ... ... ''' soup=BeautifulSoup(html,'html.parser') items=soup.select('p,div[data type=“a”]”) 打印(项目)
输出

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>]
[aaa

,aaa

,aaa

,bbb

,bbb

,bbb

,…,…]