Парсинг товаров с сайта: цены, остатки, карточки
Как собирать карточки товаров, почему цена - самое ненадёжное поле, как сопоставлять товары между источниками и что проверять в собранных данных.
Все статьи гида Парсинг данных · 11
Карточка товара - самый частый объект сбора, и у него есть особенности, из-за которых собранные данные регулярно оказываются неверными при формально работающем парсере.
Что входит в карточку
Идентификаторы. Артикул, штрихкод, идентификатор из адреса страницы. Самое важное поле: без него собранное невозможно ни сопоставить, ни обновить.
Название и бренд. Для человека, не для сопоставления.
Цена. Самое востребованное и самое ненадёжное поле - см. ниже.
Наличие. Часто важнее цены.
Характеристики. Обычно в виде набора пар, и структура у разных источников разная.
Изображения и описание. Осторожно: это объекты авторского права, и собирать их для использования у себя - другая история, чем собирать цифры для анализа.
Почему цена ненадёжна
Пять причин, каждая из которых встречается регулярно:
Зависит от региона. Один товар, разные города, разные цены. Собирать надо с адресом нужного региона и помечать результат - см. гид по прокси.
Зависит от авторизации. Оптовая цена видна только вошедшим.
Зависит от количества. Цена за штуку отличается от цены за упаковку, и на странице может быть указана любая из них.
Акции с ограничениями. «По карте», «при заказе от», «до конца недели» - на странице это несколько чисел, и парсер обязан понимать, какое из них берёт.
Персональные предложения. Часть площадок показывает разные цены разным посетителям.
Практический вывод: храните цену вместе с условиями сбора - регион, авторизация, дата, тип цены. Без этого расхождение с реальностью невозможно объяснить, а объяснять придётся.
Сопоставление между источниками
Главная сложность при сборе с нескольких сайтов.
Надёжно: штрихкод, артикул производителя, точное совпадение бренда и модели.
Ненадёжно: название. «Смартфон X 128 ГБ чёрный» на двух сайтах может быть разной комплектацией, разного года и с разной гарантией.
Что делать:
- Собирать все доступные идентификаторы, а не только один.
- Сопоставлять по устойчивому, а к названию обращаться в последнюю очередь.
- Помечать уверенность сопоставления: точное, вероятное, ручное.
- Проверять выборочно руками. Двадцать позиций раз в неделю показывают качество сопоставления лучше любых внутренних метрик.
Наличие и изменения
Наличие на разных площадках выражается по-разному: точное число, «мало», «в наличии», «под заказ», срок поставки. Приводите к своей шкале сразу при сборе, а не при анализе.
Исчезнувшие товары не удаляйте - помечайте отсутствующими. Товар может пропасть на неделю, а история появления и исчезновения позиций часто ценнее текущего среза.
История цен ценнее текущей цены: динамика показывает стратегию конкурента, а срез - только момент.
Что проверять в собранных данных
Автоматические проверки, ловящие большинство проблем:
- Цена в разумном диапазоне. Ноль, отрицательное или в сто раз больше вчерашнего - признак сломанного разбора.
- Обязательные поля заполнены. Пустое название - сбой, а не товар без названия.
- Число собранных позиций сопоставимо с прошлым разом. Резкое падение означает поломку, а не исчезновение каталога.
- Нет дубликатов по ключу - см. дедупликацию.
- Типы верны. Цена как строка с пробелами и валютой требует приведения, и делать это надо при сборе.
Общее правило: парсер должен сообщать о подозрительном, а не молча писать в базу. Тысяча позиций по нулевой цене - это авария, и узнать о ней надо сразу, а не от коллеги через неделю.
Как это устроено технически - парсинг на Python. Особенности маркетплейсов - отдельная статья. Обзор - гид по парсингу.
Вопросы и ответы
Почему собранная цена не совпадает с той, что видит покупатель?
Потому что цена часто зависит от условий: региона, авторизации, количества, действующих акций и персональных предложений. Собранное значение верно для тех условий, в которых оно собрано, и хранить его надо вместе с ними.
Как сопоставить товары с разных сайтов?
По устойчивому идентификатору: штрихкоду или артикулу производителя. Сопоставление по названию неизбежно даёт ошибки - разная комплектация, разный объём, разный год выпуска выглядят как один и тот же товар. Любое автоматическое сопоставление требует выборочной проверки руками.
Что делать с товарами, которые пропали из каталога?
Не удалять, а помечать как отсутствующие. Товар может пропасть временно, а история появления и исчезновения позиций часто ценнее текущего среза: по ней видно, что уходит из ассортимента и что появляется.
Ещё по теме
- Парсинг данных с сайта: как это устроеноГид
- Парсинг сайтов конкурентов: что можно собирать и зачемКакие данные о конкурентах имеет смысл собирать, как построить регулярный мониторинг, что делать с расхождениями и где проходит граница допустимого.
- Защита от парсинга сайта: что работает, а что нетКакие меры защиты от автоматического сбора действительно работают, какие только мешают пользователям, и как выбрать уровень защиты под свою ситуацию.
- Парсинг сайтов на Python: Playwright, ретраи, дедупликацияКакой стек выбрать под задачу, как писать селекторы, которые переживают правки вёрстки, как устроены ретраи и почему дедупликация нужна с самого начала.
Сделаю под ключ
Соберу парсер под ваш источник
С обходом защиты, прокси и выгрузкой в таблицу, базу или Telegram. Работает по расписанию без вас.
от 300 $ · 3-7 дней
«Очень быстрый парсинг, спасибо большое! Даже получилось чуть больше номеров, всем рекомендую! Делал заказ 2 раза, всё устраивает, буду обращаться ещё.»