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

In Python, how do I find elements that contain a specific attribute?

我正在使用 Python 3.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" 尝试未成功。我想 return 包含该属性的元素。

您的select或无效

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

它应该用于方法 .select() 但它仍然无效,因为它意味着 select <a> class 而不是属性。

要匹配所有内容,请将 * 用于 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>]