BeautifulSoup: извлечение атрибутов HTML-тегов

Есть ли способ получить атрибуты HTML-тегов только при text=True без указания тегов.

Пример:

html=<p class="c4">SOMETEXT</p>

Я мог бы сделать:

[tag.attrs for tag in soup.findAll('p')]
>>> [[(u'class', u'c1')]]

Есть ли способ сделать:

[text.attrs for text in soup.findAll(text=True)]

Помогите очень признателен!


person root    schedule 17.07.2012    source источник


Ответы (1)


Думаю, вы хотите этого, поскольку вопрос был выяснен:

[tag.attrs for tag in soup.findAll(True) if tag.string]

.findAll(True) возвращает все теги в документе, поэтому они будут иметь .attr, даже если он пуст, и отфильтровать, если тег имеет .string содержимое.

person Jon Clements♦    schedule 17.07.2012
comment
Спасибо, возможно, вопрос был плохо сформулирован, но я имел в виду получение атрибутов, когда text=True, не указывая имя тега. - person root; 17.07.2012
comment
@root хорошо, в таком случае вы действительно пытались запустить код, о котором вы упоминаете, есть ли способ сделать это :? Поскольку я считаю, что это действительно сработает... (хотя я бы не стал называть это text, tag, вероятно, было бы лучшим именем) - person Jon Clements♦; 17.07.2012
comment
Я попытался, но получил и ошибку: Traceback (последний последний вызов): Файл ‹interactive input›, строка 1, в ‹module› Файл C:\Python26\lib\site-packages\BeautifulSoup.py, строка 473, в getattr поднять AttributeError, объект '%s' не имеет атрибута '%s' % (self.__class__.__name__, attr) AttributeError: объект 'Declaration' не имеет атрибута 'attrs' - person root; 17.07.2012