В Python, как мне найти элементы, которые содержат определенный атрибут? - PullRequest
0 голосов
/ 02 января 2019

Я использую Python 3.7.Я хочу найти все элементы на моей HTML-странице, которые имеют атрибут «постоянная ссылка на данные», независимо от его значения, даже если оно пустое.Тем не менее, я не понимаю, как это сделать.Я использую пакет bs4 и попробовал следующее

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

Атрибут обычно находится только в тегах привязки на моей странице, поэтому моя неудачная попытка "a.data-permalink".Я хотел бы вернуть элементы, содержащие атрибут.

1 Ответ

0 голосов
/ 02 января 2019

Ваш селектор недействителен

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