Проверка атрибутов в BeautifulSoup?

Я анализирую некоторые данные из HTML, просматривая элементы на определенном уровне с помощью nextSibling и выполняя разные действия в зависимости от имени тега и класса каждого обнаруженного элемента.

например,

if n.name == "p" and n.class == "poem": blah()

Но это вызывает ошибку, если элемент не имеет класса или если он не является экземпляром Tag и, следовательно, не имеет имени.

Тестирование перед доступом, как это

if "name" in n:

всегда вернуть ложь. Я мог бы проверить тип объекта, возвращаемого nextSibling, чтобы попытаться отсеять NavigableString и Comment, но должен быть более простой способ.

РЕДАКТИРОВАТЬ

Отправил по электронной почте этот вопрос разработчику BeautifulSoup и порекомендовал протестировать его с помощью

n.get("class")

, который возвращает None, если "class" не установлен, что позволяет просто сделать:

if n.get("class") == "poem": blah()
13
задан blocks 10 August 2011 в 19:01
поделиться