Обидная и очень распространённая ситуация: характеристики товаров на сайте есть — выводятся таблицей в карточке, — а в товарную выгрузку не попадают. Данные, за которые уже заплачено контент-менеджерам, не доезжают до фида и, значит, не работают ни в поиске, ни в фильтрах, ни в подборе.
Почему так выходит
Причина обычно в настройках выгрузки: в неё включили название, цену, наличие и картинки, а свойства — нет. Иногда потому, что фид делали для одной задачи и другие не предполагались, иногда потому, что свойства хранятся не там, откуда собирается выгрузка.
Исправить в настройках — лучший вариант. Но он не всегда доступен: движок может не уметь, доступа к настройкам может не быть, а часть свойств может вообще существовать только в шаблоне страницы.
Тогда данные забирают со страниц.
Как устроены таблицы характеристик
На практике встречаются три способа разметки, и разбирать нужно все три.
Списки определений. Название свойства и значение идут парой в специальной разметке. Самый удобный случай.
Таблицы из двух колонок. Слева название, справа значение. Тоже надёжно распознаётся: строка с ровно двумя ячейками почти всегда пара «свойство — значение».
Блоки с классами. Название и значение лежат соседними элементами с классами вроде prop-title и prop-value. Здесь сложнее: между ними бывает один-два уровня вложенности, и искать пару приходится не только среди прямых соседей.
Разбор, умеющий только первый вариант, соберёт данные с меньшинства сайтов.
Что нужно отфильтровать
Со страницы приезжает не только полезное. Обязательный список исключений:
- Цены в свойствах. «Цена: 4 890 ₽» — не характеристика, а дубль поля, которое уже есть.
- Шаблонные заглушки. Строки вида
#PROP_TITLE#или{{property}}означают, что шаблон отработал не полностью. - Служебные поля. «Артикул», «Код», «ID», «Наличие» — они уже есть в фиде.
- Пустые значения. Свойство с прочерком или «-» лучше не переносить: пустое поле честнее.
- Навигационный мусор. Хлебные крошки и меню, попавшие в разбор из-за похожей разметки.
Без фильтрации каталог засоряется быстрее, чем обогащается, и потом это чистить дороже.
Нагрузка на сайт
Обход ста тысяч страниц — заметная нагрузка, и с ней нужно обращаться аккуратно.
Ограничить скорость. Несколько запросов в секунду, а не столько, сколько выдержит канал. Задача — собрать данные, а не проверить сайт на устойчивость.
Представляться честно. Обходчик должен сообщать, кто он, и оставлять контакт. Маскировка под обычный браузер — плохая практика даже на собственном сайте.
Ходить ночью. Обход в часы низкой посещаемости не мешает покупателям. Для больших каталогов это не пожелание, а необходимость: работа растягивается на несколько ночей.
Уметь останавливаться и продолжать. Прерванный обход должен возобновляться с того места, где остановился, а не начинаться заново.
Что делать с собранным
Собранное — сырьё, а не готовые характеристики. Дальше нужно:
- Привести единицы к одному виду — иначе получите три разных значения одного свойства.
- Свести имена свойств. «Мощность», «Мощность, Вт» и «Потребляемая мощность» со страниц разных категорий должны стать одним полем.
- Проверить выборочно. Несколько десятков карточек из разных категорий, сверка с реальной страницей.
- Показать до и после. Обогащение должно быть обратимым: видно, что было и что стало.
Границы метода
Честно о том, чего он не даёт:
- Если свойства не выводятся на странице, взять их неоткуда.
- Если страница собирается скриптом уже в браузере, простой разбор HTML не увидит содержимого — нужен более тяжёлый обход.
- Качество ограничено качеством вашего же контента: ошибки на странице переедут в фид.
Последнее иногда оказывается пользой: обход показывает, где карточки на сайте заполнены плохо.
Коротко
- Характеристики часто есть на сайте, но не попадают в выгрузку — их можно забрать со страниц.
- Разбирать нужно три вида разметки: списки определений, таблицы из двух колонок и блоки с классами.
- Обязательно фильтровать цены, служебные поля, пустые значения и шаблонные заглушки.
- Обход ограничивают по скорости, ведут ночью и делают возобновляемым.
- Собранное нужно нормализовать по единицам и именам свойств, а не класть в фид как есть.


