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