--- title: Извлечь типизированные данные из HTML description: Свяжите поля модели с CSS- или XPath-селекторами и разберите HTML-ответ операции. sources: - eazy_sdk_html.parse_html - eazy_sdk_html.CSS - eazy_sdk_html.XPath - eazy_sdk_html.Scope - eazy_sdk_html.Regex - eazy_sdk.response.Html api_fingerprint: "sha256:76c3c0140f33c692c11d72331eedf47ebcb48bf7e73bfe35ccefb5176632bd5d" --- Поля документной модели несут CSS- или XPath-селекторы. SDK сначала строит дерево HTML, затем извлекает простые значения и передаёт их настроенному адаптеру моделей. Модель остаётся обычным `dataclass`. :::::{grid} 1 1 2 2 :class-container: http-exchange :gutter: 2 ::::{grid-item} :class: http-panel http-panel--request **→ Request** · ``GET /catalogue/page-1.html`` :::: ::::{grid-item} :class: http-panel http-panel--response **← Response** · ``200 OK`` ```html

Mailbox library

SDK Patterns12.50
``` :::: ::::: ```{literalinclude} ../../../../../../examples/docs/response_html.py :language: python :start-after: "# docs:models:start" :end-before: "# docs:models:end" ``` `CSS("a::text")` читает текст одного узла. `Scope(CSS("article.book"))` создаёт отдельный контекст для каждой карточки и строит список `Book`. Необязательное поле получает `None`, если селектор ничего не нашёл; обязательное поле приводит к `ExtractionError` с путём модели. ```{literalinclude} ../../../../../../examples/docs/response_html.py :language: python :start-after: "# docs:operation:start" :end-before: "# docs:operation:end" ``` Селекторы в `Catalogue` сообщают компилятору, что ответ нужно читать как документ. Модель без селекторов на том же месте читалась бы как JSON. Явное представление `Html(Model)` нужно для особого статуса, типа содержимого или условия. :::{dropdown} Файл примера целиком ```{literalinclude} ../../../../../../examples/docs/response_html.py :language: python ``` ::: Запуск: `uv run python examples/docs/response_html.py`. ```text Mailbox library: 2 books first: SDK Patterns 12.50 next: page-2.html ``` По умолчанию HTML читает Parsel с поддержкой CSS и XPath. Другой документный бэкенд задаётся в `Serialization(documents=(...))` на корне. Компилятор заранее проверяет, что бэкенд понимает язык каждого селектора. Для отдельного HTML-фрагмента без HTTP используйте `parse_html(data, Model)`. Он применяет ту же модель, селекторы и адаптеры. ## Достать значение из встроенного скрипта Токен страницы часто лежит внутри `