Як працювати з 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() для сніпетів створюють один і той же тип дерева.

Дивіться також

 Українська