extract описывает словами, что нужно достать со страницы, а в ответ приходит
готовый объект parsed. Вы не пишете селекторы: вёрстка у каждого сайта своя и
меняется без предупреждения, а «Цена числом, без валюты» — то же самое и на
маркетплейсе, и в блоге.
Цена: +3 кредита к разметке, итого 4.
Что приходит
object | null
Заказанные поля с найденными значениями. Приходит всегда, если
extract
заказывали, — и null, если разбор не состоялся. Ключи те же, что вы задали,
и в том же порядке.string
Живёт в
fetch_metadata. Почему разбор не состоялся, человеческим языком.
Пустая строка — либо всё прошло как заказано, либо extract не заказывали.true или false. Поле, которого на странице не нашлось, приходит null —
ключ не пропадает, чтобы разбор ответа не приходилось писать через проверку
наличия ключа.
Как описывать поля
Имя поля — латиница, цифры и подчёркивание, начинается с буквы, до 64 символов. Это ключи в вашем коде, и они должны переживать переход в любой язык без экранирования.
Описание — обычная фраза, а не шаблон. Чем точнее сказано про форму значения,
тем ближе результат к тому, что вы ждёте: «Цена числом, без валюты» даёт
8990, а просто «Цена» может дать "8 990 ₽".
У GET
extract передаётся строкой JSON — в адресе объекту взяться неоткуда.
У POST это обычный объект. Клиентские библиотеки ходят POST, и заботиться об
этом не приходится.Чего разбор не гарантирует
Страницу читает языковая модель, а не набор правил. Это значит, что результат не воспроизводится с точностью разборщика: на нестандартной вёрстке поле может прийти пустым, а на двух похожих страницах одного сайта — разным по форме. Обещать здесь больше, чем есть, было бы нечестно. Если вам нужна ровно та величина ровно из того блока и каждый раз одинаково — берите подрезку блоками: селектор либо совпал, либо нет, и это видно поmatched.
Неудача не оплачивается
Разбор не списывается, если он не состоялся: модель не ответила, вернула не JSON или не нашла ни одного из заказанных полей. Тогда в ответеparsed: null,
в extract_note — что случилось, а в счёте остаётся только разметка:
Отказы
Ошибка в описании полей —400 invalid_request: неправильное имя, слишком
длинное описание, больше 25 полей, extract не объектом. Проверяется до
списания и до похода в браузер, так что опечатка ничего не стоит.
Если разбор на сервере не настроен вовсе, приходит 503 extract_unavailable —
тоже до списания. Это не «попробуйте позже с другими параметрами», а «этой
возможности здесь сейчас нет».
Дальше
Тонкая настройка разметки
Селекторы, когда нужен предсказуемый результат, а не догадка.
Надстройки Fetch
Что ещё можно добавить к разметке и сколько это стоит.
Кредиты и права
Весь прайс и как подключаются платные позиции.
Справочник
Все параметры
/v1/fetch и коды ответов.
