Как работать с DOM в Python

Как работать с DOM в Python

Aspose.HTML FOSS для моделей Python HTML как основанный на стандартах DOM: Document создает узлы, Element управляет атрибутами, а Node обеспечивает операции с деревом. Это руководство создает небольшое дерево и считывает его структуру обратно, используя pip для установки.

Пошаговое руководство

Шаг 1: Установить пакет

Установите пакет:

git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .

Затем подтвердите метаданные пакета:

pip show aspose-html-foss

Шаг 2: Импортировать необходимые классы

from aspose_html.dom import Document

Шаг 3: Создать документ и элемент

Document — это фабрика узлов; create_element() возвращает новый элемент, который вы присоединяете с помощью append_child():

doc = Document()
el = doc.create_element("div")
doc.append_child(el)

Шаг 4: Установить атрибуты

set_attribute() записывает атрибуты разметки; классы и идентификаторы управляют последующим сопоставлением CSS:

el.set_attribute("class", "foo")
el.set_attribute("id", "bar")

Шаг 5: Прочитать структуру обратно

get_element_by_id() получает элемент, get_attribute() возвращает его атрибуты, а has_child_nodes() подтверждает структуру:

found = doc.get_element_by_id("bar")
print(found.get_attribute("class"))
print(doc.has_child_nodes())

Распространённые проблемы и решения

Поиск по id ничего не возвращает. Элемент id атрибут должен быть установлен до get_element_by_id() вызывается, и элемент должен быть присоединён к дереву документа.

Чтения атрибутов возвращают неожиданные значения. get_attribute() возвращает то, что было последним установлено с set_attribute(); проверьте опечатки в названиях атрибутов — они являются обычными строками.

Узлы, созданные из другого документа, ведут себя некорректно. Узлы привязаны к документу. Создавайте их через тот же Document, или передайте их с помощью import_node()/adopt_node().

Часто задаваемые вопросы

Какие типы узлов может создавать Document?

Элементы, текстовые узлы, комментарии и фрагменты документа — через create_element(), create_text_node(), create_comment() и create_document_fragment().

Как переместить или удалить существующие узлы?

Используйте операции Node: insert_before(), remove_child(), replace_child() и clone_node().

Могу ли я разбирать существующую разметку вместо того, чтобы строить деревья вручную?

Да — HTMLDocument.parse() для страниц и HTMLDocument.parse_fragment() для фрагментов создают одинаковое дерево.

См. также:

 Русский