# Разбор одной страницы

> POST /v1/parse: вид страницы, поля товара, плитки списка и текстовая выжимка — по адресу или по готовой разметке

Источник: https://docs.parreq.com/parse/

`/v1/parse` — тот же словарь, что работает внутри
[обхода каталога](https://docs.parreq.com/crawl-catalog), но на одной странице. Ручка отвечает на
три вопроса: что это за страница, какие поля товара на ней видны и откуда они
взяты. Нужна, чтобы проверить сайт перед обходом, разобрать страницу, которую
вы уже загрузили сами, или показать агенту текст страницы без разметки.

```bash по адресу
curl -X POST https://api.parreq.com/v1/parse \
  -H "Authorization: Bearer pr_ВАШКЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://shop.example/catalog/kraska/emal-pf-115/", "text": true}'
```

```bash по готовой разметке
curl -X POST https://api.parreq.com/v1/parse \
  -H "Authorization: Bearer pr_ВАШКЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://shop.example/catalog/kraska/emal-pf-115/",
       "html": "<!doctype html><html>…</html>"}'
```

| параметр | обязателен | по умолчанию | значение |
|---|---|---|---|
| `url` | одно из двух | — | адрес: страница забирается браузером, как в Fetch |
| `html` | одно из двух | — | готовая разметка: страница не забирается, `url` нужен только для форм адресов |
| `text` | нет | `false` | добавить текстовую выжимку в поле `text` |
| `max_chars` | нет | 6000 | предел выжимки в знаках |
| `wait_ms` | нет | 2500 | сколько ждать догрузки, когда страница берётся по `url` |

**Цена:** по `url` — 1 кредит, как обычный Fetch. По `html` — бесплатно:
браузер не работал, а словарь — миллисекунды.

## Ответ

```json
{
  "url": "https://shop.example/catalog/kraska/emal-pf-115/",
  "kind": "card",
  "sure": true,
  "why": "ld+json Product с ценой; один товар под h1",
  "name": "Эмаль ПФ-115 белая, 2.7 кг",
  "crumbs": ["Каталог", "Краски", "Эмали"],
  "price_source": "ld+json",
  "ambiguous": false,
  "candidates": [24.9],
  "variants": true,
  "product": {
    "name": "Эмаль ПФ-115 белая, 2.7 кг",
    "price": 24.9,
    "old_price": null,
    "currency": "BYN",
    "in_stock": true,
    "sku": "ПФ-115-27",
    "brand": "Лакокраска",
    "url": "https://shop.example/catalog/kraska/emal-pf-115/"
  },
  "items": [],
  "credits": 1,
  "text": "Эмаль ПФ-115 белая, 2.7 кг\nЦена 24,90 руб. …"
}
```

- **`kind`** (`string`):
  Вид страницы: `sections` — оглавление, `listing` — список товаров, `card` —
  карточка, `not_catalog` — не каталог. Пустая строка — словарь не понял.

- **`sure`** (`boolean`):
  Уверен ли словарь. В обходе `false` означает, что вид страницы уточнит
  языковая модель.

- **`why`** (`string`):
  Почему словарь так решил: по каким признакам.

- **`name`** (`string`):
  Имя страницы: заголовок `<h1>` или последняя хлебная крошка. Не `<title>` —
  он на многих сайтах один на весь каталог.

- **`crumbs`** (`array`):
  Хлебные крошки без служебных «Главная» и «Каталог».

- **`price_source`** (`string`):
  Откуда взята цена: `ld+json`, `itemprop`, `og`, `data`, `class` или пусто.

- **`ambiguous`** (`boolean`):
  Кандидатов на цену два и больше, а микроразметки нет. В обходе такая
  страница уходит модели.

- **`candidates`** (`array`):
  Все числа, похожие на цену, в порядке убывания уверенности.

- **`variants`** (`boolean`):
  На карточке есть выбор варианта: размер, цвет, фасовка.

- **`product`** (`object`):
  Поля товара у карточки — те же восемь, что в [режиме
  каталога](https://docs.parreq.com/crawl-catalog#поля). Ненайденное — `null`. У списка и
  оглавления — пустой объект.

- **`items`** (`array`):
  Плитки списка у `listing`: по объекту на товар с теми же полями, `url` —
  адрес карточки. У карточки — пустой список.

- **`text`** (`string`):
  Текстовая выжимка, если просили `text: true`: без шапки, меню и подвала, со
  сводкой микроразметки в начале. Ровно то, что в обходе видит языковая
  модель, — и ровно то, что отдаёт `parreq_fetch` с `text: true`.

## Зачем

### Проверить сайт перед обходом

    Откройте карточку через `/v1/parse`. Если `price_source` — `ld+json` или
    `itemprop`, обход пройдёт словарём, без модели, и цена будет точной. Если
    `ambiguous: true` — стоит посмотреть `candidates`: возможно, на сайте цена
    в рассрочку стоит раньше обычной.

### Разобрать то, что уже загружено

    Страница пришла из вашего Fetch, из коробки или из архива — передайте
    `html`, и словарь разберёт её бесплатно. Забирать страницу дважды незачем.

### Показать агенту страницу коротко

    `text: true` с `max_chars` даёт агенту текст без разметки. Инструмент
    `parreq_page_read` в [MCP](https://docs.parreq.com/mcp) — это и есть `/v1/parse` с текстом.

> **Примечание.**
>   Языковой модели в этой ручке нет. Она отвечает тем, что видит словарь, — и
>   это честнее: по `sure`, `ambiguous` и `why` видно, где обход обойдётся без
>   модели, а где ей придётся судить.
