在Python中,如何查找包含特定属性的元素?

2022-07-06 11:50:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python3.7。我想定位HTML页面中所有具有属性“data permalink”的元素,不管它的值是什么,即使该值是空的。但是,我不知道怎么做。我正在使用bs4包并尝试以下操作

soup = BeautifulSoup(html)
soup.findAll("data-permalink")
[]
soup.findAll("a")
[<a href=" ... </a>]
soup.findAll("a.data-permalink")
[]

该属性通常只在我的页面上的锚标记中找到,因此我的“a.data-permalink”尝试失败。我想返回包含属性的元素。你知道吗


Tags: 标记定位元素data属性html页面hrefsoupbs4beautifulsouppermalinkfindall
1条回答
网友
1楼 ·

您的选择器无效

soup.findAll("a.data-permalink")

它应该用于方法.select(),但仍然无效,因为它意味着用类而不是属性选择<a>。你知道吗

要匹配所有内容,请使用*表示select()

.select('*[data-permalink]')

或者True如果使用findAll()

.findAll(True, attrs={'data-permalink' : True})

示例

from bs4 import BeautifulSoup

html = '''<a data-permalink="a">link</a>
<b>bold</b>
<i data-permalink="i">italic</i>'''

soup= BeautifulSoup(html, 'html.parser')
permalink  = soup.select('*[data-permalink]')
# or
# permalink  = soup.findAll(True, attrs={'data-permalink' : True})
print(permalink)

结果,跳过<b>元素

[<a data-permalink="a">link</a>, <i data-permalink="i">italic</i>]