Как работать с 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() для фрагментов создают одинаковое дерево.