Как разобрать HTML в Python
Aspose.HTML FOSS для Python разбирает разметку с использованием стандартизированного алгоритма построения дерева: HTMLDocument.parse() для полных страниц, HTMLDocument.parse_fragment() для фрагментов и типизированные классы элементов (HTMLElement и его подклассы) в результате. Это руководство охватывает точки входа парсинга и проверяет вывод через DOM, используя 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 .Шаг 2: Импортируйте необходимые классы
from aspose_html.html_document import HTMLDocument
from aspose_html.dom import DocumentШаг 3: Выберите правильную точку входа парсинга
HTMLDocument.parse() выполняет построение дерева полного документа с восстановлением ошибок согласно стандартам; HTMLDocument.parse_fragment() применяет алгоритм фрагмента для частичной разметки; HTMLDocument.load() читает из источника. Разобранные элементы приходят типизированными — <a> является HTMLAnchorElement, <input> — HTMLInputElement.
Шаг 4: Проверка вывода через DOM
Разобранный результат представляет собой обычное дерево DOM — применяются те же API поиска и атрибутов. Программное построение эквивалентной структуры демонстрирует общую поверхность:
doc = Document()
el = doc.create_element("div")
el.set_attribute("id", "content")
doc.append_child(el)
print(doc.get_element_by_id("content").has_child_nodes())Шаг 5: Продолжить со стилями или структурой
Подключите таблицы стилей и прочитайте вычисленные стили, либо используйте вспомогательные функции вставки Element (insert_adjacent_html(), insert_adjacent_text()) для локальных правок — вывод разбора питает каждый другой слой.
Распространённые проблемы и их решения
Частичная разметка получает обёртки html и body. parse() применяет правила полного документа; используйте parse_fragment() для фрагментов.
Некорректная разметка парсится без ошибок. Это поведение согласно стандартам — построение дерева определяет восстановление для каждого случая ошибки, а не генерирует исключение.
Содержимое таблицы появляется вне её таблицы. Foster parenting неверно размещённого содержимого таблицы — часть алгоритма; исправьте вложенность в исходном коде.
Часто задаваемые вопросы
Типизированы ли разобранные элементы?
Да — парсинг создает иерархию HTMLElement: элементы управления формой (HTMLFormElement, HTMLInputElement), встроенный контент (HTMLImageElement, HTMLCanvasElement), навигацию (HTMLAnchorElement) и многое другое.
Могу ли я управлять конвейером парсинга на более низком уровне?
Да — Tokenizer и TreeBuilder публичны, а parse_html() служит одноразовой обёрткой.
Выполняет ли парсинг скрипты?
Нет. Оценка скрипта является явной и отдельной через JSContext.