Введение
Слой DOM является ядром Aspose.HTML FOSS для Python. Он моделирует страницу HTML так же, как это делают стандарты — в виде дерева узлов Document, Element, Text, Comment и DocumentFragment — и предоставляет вам операции для построения, инспекции и перестройки этого дерева из кода Python, без участия браузера.
В этом посте рассматриваются основные возможности DOM: создание узлов, управление атрибутами, перемещение поддеревьев с помощью операций Node, разбор фрагментов и повторный поиск элементов после построения дерева. Всё показанное здесь поставляется в пакете aspose-html-foss на PyPI, имеет MIT-лицензию и работает в чистом Python версии 3.10 или новее.
Ключевые возможности
Создание документов и элементов
Document — это фабрика узлов: create_element() для элементов, create_text_node() для текста, create_comment() для комментариев и create_document_fragment() для легковесных контейнеров. Новые узлы присоединяются к дереву с помощью append_child():
from aspose_html.dom import Document
doc = Document()
el = doc.create_element("div")
doc.append_child(el)
Управление атрибутами
Атрибуты проходят сквозной обход через Element.set_attribute(), get_attribute(), has_attribute() и remove_attribute(). Класс Attr моделирует отдельные узлы атрибутов, когда они нужны как объекты, а не строки:
from aspose_html.dom import Document
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)
Операции над деревом узла
Каждый узел наследует стандартный набор инструментов дерева от Node: insert_before(), remove_child(), replace_child(), clone_node() и contains() для изменения и проверки структуры, а также child_nodes, parent_node и first_child для обхода, и text_content для чтения или назначения текста поддерева. get_root_node() и has_child_nodes() отвечают напрямую на часто задаваемые вопросы о структуре.
Разбор фрагментов и соседней разметки
HTMLDocument.parse() обрабатывает полные страницы, а HTMLDocument.parse_fragment() — частичную разметку. Для точечного вставления относительно существующего элемента Element предоставляет insert_adjacent_html(), insert_adjacent_text() и insert_adjacent_element() — стандартную четырёхпозиционную вставку API. Document.import_node() и adopt_node() перемещают узлы между документами.
Поиск и обратное чтение
Document.get_element_by_id() извлекает элемент по его атрибуту id. В сочетании с доступом к вычисленным стилям из уровня CSSOM, вы можете проверить, что содержит поддерево и как оно будет стилизовано:
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
el = doc.create_element("div")
el.set_attribute("id", "bar")
doc.append_child(el)
sheet = CSSStyleSheet()
sheet.replace_sync("#bar { color: blue }")
doc.attach_style_sheet(sheet)
style = el.get_computed_style()
print(style.get_property_value("color"))
Быстрый старт
Установить из PyPI:
asposefoss/html is not yet published — build from source until it ships. See the project README for build instructions.Создайте небольшое дерево, пометьте его атрибутами и подтвердите структуру:
from aspose_html.dom import Document
doc = Document()
container = doc.create_element("div")
container.set_attribute("id", "content")
doc.append_child(container)
child = doc.create_element("p")
container.append_child(child)
print(container.has_child_nodes())
print(doc.get_element_by_id("content").get_attribute("id"))
Открытый исходный код и лицензирование
Aspose.HTML FOSS для Python имеет лицензию MIT — свободен для коммерческого использования, модификации и распространения. Код размещён на GitHub, а релизы публикуются в PyPI как aspose-html-foss.