Часто задаваемые вопросы
Лицензирование и открытый исходный код
Какую лицензию использует Aspose.HTML FOSS для Python?
Библиотека распространяется под лицензией MIT. Полный текст поставляется как LICENSE файл в репозитории GitHub.
Могу ли я использовать её в коммерческих продуктах?
Да. Лицензия MIT разрешает коммерческое использование, модификацию, перераспределение и сублицензирование. Единственное требование — сохранять уведомление об авторском праве и текст лицензии в значимых копиях.
Установка и требования
Как установить библиотеку и какие версии Python поддерживаются?
Установите с помощью git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git. Библиотека требует Python 3.10 или новее; текущий релиз — 0.1.0.
Есть ли какие-либо нативные зависимости?
Нет. Реализация полностью на Python — без движка браузера, без скомпилированных расширений — поэтому она ведёт себя одинаково на Windows, Linux и macOS, включая CI-раннеры и контейнеры.
API Usage
Как разобрать HTML в документ?
Используйте HTMLDocument.parse() для полных страниц или HTMLDocument.parse_fragment() для частичной разметки. Для программного построения Document является фабрикой узлов:
from aspose_html.dom import Document
doc = Document()
el = doc.create_element("div")
el.set_attribute("id", "bar")
doc.append_child(el)Как применить CSS и прочитать полученный стиль?
Разберите текст таблицы стилей с помощью CSSStyleSheet.replace_sync(), прикрепите его с помощью Document.attach_style_sheet() и считайте разрешённый результат с помощью Element.get_computed_style():
from aspose_html.cssom import CSSStyleSheet
sheet = CSSStyleSheet()
sheet.replace_sync("#bar { color: blue }")
doc.attach_style_sheet(sheet)
print(el.get_computed_style().get_property_value("color"))Корректно ли каскад обрабатывает специфичность и !important?
Да. Вычисленные значения учитывают специфичность селекторов (ID важнее класса, класс важнее типа), встроенные декларации превосходят правила автора, а !important правила автора превосходят неважные встроенные декларации. Наследование происходит от родителя к потомку для наследуемых свойств.
Могу ли я использовать токенизатор и построитель дерева напрямую?
Да — Tokenizer.tokenize() генерирует поток токенов стандарта, TreeBuilder.run() выполняет построение дерева, а parse_html() оборачивает весь конвейер в один вызов.
Как работать с URL и кодировками символов?
URL.parse() и URL.can_parse() предоставляют обработку URL в стиле WHATWG с URLSearchParams для строк запроса. Для необработанных байтов detect_encoding() возвращает кодировку, степень уверенности и декодированный текст.
Известные ограничения
Есть ли какие-то API, которые присутствуют, но не реализованы?
Объявлено небольшое количество членов, но они пока не работают, включая CSSRule.type, CSSRule.css_text и HTMLImageElement.decode. Файл limitations.md в модели знаний отслеживает их; избегайте полагаться на них.
Рендерит ли библиотека страницы или конвертирует их в другие форматы?
Нет. Текущий релиз сосредоточен на парсинге, манипуляциях с DOM, вычислении стилей CSS, структурах разметки, URL и кодировках. Он не включает конвертацию форматов и рендеринг изображений/PDF.
Выполняется ли JavaScript автоматически во время парсинга?
Нет. Парсинг никогда не запускает скрипты. Оценка скриптов происходит явно и только по запросу через JSContext, при этом загрузка модулей контролируется ModuleRegistry и ModuleLoadPolicy.