Разбор структурированных данных
Чтение машиночитаемых блоков, которые страница уже публикует, вместо разбора видимого текста селекторами.
Большинство коммерческих страниц несёт блок структурированных данных для поисковиков: JSON-LD в теге script, иногда микроразметку в атрибутах. Обычно там лежат ровно те поля, которые вы собирались доставать руками, уже типизированные и уже названные.
Читать их дешевле по всем измерениям. Не надо поддерживать селекторы, не ломается вёрстка, нет зависимости от того, где визуально стоит число, а значения приходят валютой и суммой, а не форматированной строкой, которую надо разбирать обратно.
Ограничения стоит назвать. Блок публикуют для поисковиков, поэтому он бывает оптимистичным, неполным или устаревшим относительно того, что называют покупателю. Там, где эта разница важна, например при контроле минимальных цен, считайте его отправной точкой и сверяйте с тем путём, который проходит покупатель.
Практическое правило короткое: сначала проверьте структурированные данные, потом переходите к селекторам, и записывайте, что из двух дало каждое поле. Датасет, смешивающий оба источника и не сообщающий об этом, невозможно отладить, когда числа разойдутся.
Где лежат поля
JSON-LD лежит в теге script с типом application/ld+json и содержит граф объектов: товар с предложением, статью с автором, объявление с местоположением. Это самая распространённая форма и самая простая для разбора.
Microdata и RDFa кладут ту же информацию в атрибуты видимой разметки. Старее, возиться дольше, но на многих крупных сайтах всё ещё встречается.
И то и другое это статический текст в ответе, поэтому обычно оно доживает до вас и без рендеринга JavaScript, даже когда видимое содержимое нет.
Проверить до написания селекторов
Один запрос отвечает, нужна ли работа по разбору вообще:
Данные уже есть
# вытащить структурный блок, если он есть
curl -s -x login_c_US:password@proxy.sotaproxy.com:10000 https://target.example/product \
| grep -A 30 'application/ld+json' | head -40
# и посмотреть, есть ли там цена, до того как строить селектор
curl -s -x login_c_US:password@proxy.sotaproxy.com:10000 https://target.example/product \
| grep -o '"price"[^,]*'- Структурные данные часто доживают там, где отрисованная страница нет, и это делает их самым дешёвым путём на сайтах со скриптами.
- Записывайте источник каждого поля. Когда блок и страница расходятся, надо знать, какое число вы оставили.
- Для контроля минимальных цен и всего, где есть корзина, блок это подсказка, а доказательством является названная цена.
Чем это не является
Это не всегда точно
Блок публикуют для поисковиков, он может отставать от страницы и умалчивать об условиях, действующих при оформлении.
Это есть не всегда
На множестве страниц его нет вовсе. Проверка стоит одного запроса и отвечает сразу.
Это не замена прохода по воронке
Цена в блоке это не цена в корзине, и ровно ради этой разницы существуют некоторые задачи.
Это не сложнее собирать
Это статический текст в ответе, поэтому рендеринг для него обычно не нужен.
Связанные термины
Смотри на практике
Готов использовать разбор структурированных данных?
SotaProxy даёт доступ к ротирующим резидентским, мобильным, дата-центр и ISP прокси. Без минимальных платежей.
Начать