---
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)`. Он применяет ту же
модель, селекторы и адаптеры.
## Достать значение из встроенного скрипта
Токен страницы часто лежит внутри `