Обогащение каталога

Как собрать характеристики со страниц собственного сайта

Частая ситуация: свойства есть на сайте, но не попадают в фид. Разбираем, как их оттуда забрать, какие бывают форматы таблиц и что делать с мусором.

Филимонов Иван3 мин чтения
Руки печатают на светлой клавиатуре у моноблока
Фото: Ilya Pavlov / Unsplash

Обидная и очень распространённая ситуация: характеристики товаров на сайте есть — выводятся таблицей в карточке, — а в товарную выгрузку не попадают. Данные, за которые уже заплачено контент-менеджерам, не доезжают до фида и, значит, не работают ни в поиске, ни в фильтрах, ни в подборе.

Почему так выходит

Причина обычно в настройках выгрузки: в неё включили название, цену, наличие и картинки, а свойства — нет. Иногда потому, что фид делали для одной задачи и другие не предполагались, иногда потому, что свойства хранятся не там, откуда собирается выгрузка.

Исправить в настройках — лучший вариант. Но он не всегда доступен: движок может не уметь, доступа к настройкам может не быть, а часть свойств может вообще существовать только в шаблоне страницы.

Тогда данные забирают со страниц.

Как устроены таблицы характеристик

На практике встречаются три способа разметки, и разбирать нужно все три.

Списки определений. Название свойства и значение идут парой в специальной разметке. Самый удобный случай.

Таблицы из двух колонок. Слева название, справа значение. Тоже надёжно распознаётся: строка с ровно двумя ячейками почти всегда пара «свойство — значение».

Блоки с классами. Название и значение лежат соседними элементами с классами вроде prop-title и prop-value. Здесь сложнее: между ними бывает один-два уровня вложенности, и искать пару приходится не только среди прямых соседей.

Разбор, умеющий только первый вариант, соберёт данные с меньшинства сайтов.

Что нужно отфильтровать

Со страницы приезжает не только полезное. Обязательный список исключений:

  • Цены в свойствах. «Цена: 4 890 ₽» — не характеристика, а дубль поля, которое уже есть.
  • Шаблонные заглушки. Строки вида #PROP_TITLE# или {{property}} означают, что шаблон отработал не полностью.
  • Служебные поля. «Артикул», «Код», «ID», «Наличие» — они уже есть в фиде.
  • Пустые значения. Свойство с прочерком или «-» лучше не переносить: пустое поле честнее.
  • Навигационный мусор. Хлебные крошки и меню, попавшие в разбор из-за похожей разметки.

Без фильтрации каталог засоряется быстрее, чем обогащается, и потом это чистить дороже.

Нагрузка на сайт

Обход ста тысяч страниц — заметная нагрузка, и с ней нужно обращаться аккуратно.

Ограничить скорость. Несколько запросов в секунду, а не столько, сколько выдержит канал. Задача — собрать данные, а не проверить сайт на устойчивость.

Представляться честно. Обходчик должен сообщать, кто он, и оставлять контакт. Маскировка под обычный браузер — плохая практика даже на собственном сайте.

Ходить ночью. Обход в часы низкой посещаемости не мешает покупателям. Для больших каталогов это не пожелание, а необходимость: работа растягивается на несколько ночей.

Уметь останавливаться и продолжать. Прерванный обход должен возобновляться с того места, где остановился, а не начинаться заново.

Что делать с собранным

Собранное — сырьё, а не готовые характеристики. Дальше нужно:

  1. Привести единицы к одному виду — иначе получите три разных значения одного свойства.
  2. Свести имена свойств. «Мощность», «Мощность, Вт» и «Потребляемая мощность» со страниц разных категорий должны стать одним полем.
  3. Проверить выборочно. Несколько десятков карточек из разных категорий, сверка с реальной страницей.
  4. Показать до и после. Обогащение должно быть обратимым: видно, что было и что стало.

Границы метода

Честно о том, чего он не даёт:

  • Если свойства не выводятся на странице, взять их неоткуда.
  • Если страница собирается скриптом уже в браузере, простой разбор HTML не увидит содержимого — нужен более тяжёлый обход.
  • Качество ограничено качеством вашего же контента: ошибки на странице переедут в фид.

Последнее иногда оказывается пользой: обход показывает, где карточки на сайте заполнены плохо.

Коротко

  • Характеристики часто есть на сайте, но не попадают в выгрузку — их можно забрать со страниц.
  • Разбирать нужно три вида разметки: списки определений, таблицы из двух колонок и блоки с классами.
  • Обязательно фильтровать цены, служебные поля, пустые значения и шаблонные заглушки.
  • Обход ограничивают по скорости, ведут ночью и делают возобновляемым.
  • Собранное нужно нормализовать по единицам и именам свойств, а не класть в фид как есть.

Вопросы по теме статьи

Зачем собирать данные со своего же сайта?

Потому что выгрузка часто беднее сайта: характеристики выводятся на странице товара, но не попадают в фид. Их сбор возвращает данные, которые у вас уже есть.

Создаёт ли это нагрузку на сайт?

Создаёт, и её нужно ограничивать. Разумный обход идёт с ограниченной скоростью и предпочтительно ночью; каталог на сотню тысяч страниц нельзя обходить в полную силу в рабочее время.

Что делать с мусором в извлечённых данных?

Фильтровать: служебные поля, пустые значения, шаблонные заглушки вида #PROP_TITLE# и повторы цены не должны попадать в характеристики. Без фильтрации каталог засоряется быстрее, чем обогащается.

Обогащение карточек товаров: описания, характеристики и теги

ИИ исправляет названия, пишет описания и дополняет характеристики, вы принимаете правки в таблице. Цены, наличие и артикулы не трогаются. На выходе — готовый YML.

Читайте дальше