Аптечные агрегаторы устроены так, что цена видна всем и сразу. Покупатель заходит, вбивает название препарата и видит список аптек с доставкой, отсортированный по цене. Первые три позиции собирают большую часть заказов. Разница в несколько гривен решает, будет продажа или нет.
Владелец аптеки пришел с задачей: он хочет видеть не свои цены, которые и так знает, а цены конкурентов по своему ассортименту. И не разово, а регулярно, чтобы реагировать. Ниже – как устроен такой мониторинг и почему сопоставление товаров сложнее самого сбора данных.

Постановка задачи
Формулировка клиента была короткой: “по названию моего товара найти такие же товары конкурентов, которые тоже делают доставку, и два раза в неделю присылать выгрузку с моими ценами и ценами конкурентов, подсвечивая позиции, где я дороже или дешевле”.
В этом предложении спрятаны четыре отдельные подзадачи, и только одна из них – собственно парсинг.
- Забрать свой ассортимент.
- Найти на площадке те же позиции у конкурентов.
- Отфильтровать тех, кто действительно конкурирует, – то есть делает доставку в нужный регион.
- Собрать все в отчет, где виден не набор чисел, а решение: что поднимать, что опускать, где все в порядке.
Самая тяжелая часть – сопоставление товаров
Кажется, что сверить цены просто: берешь название, ищешь, сравниваешь. На практике именно здесь проект либо работает, либо превращается в генератор мусора.
Один и тот же препарат у разных аптек называется по-разному. Разная форма записи дозировки, разный порядок слов, разные сокращения формы выпуска, разный производитель в названии или отсутствие его. Плюс ловушка: то же название при другой фасовке – это другой товар, и сравнивать их по цене нельзя. Двадцать таблеток дешевле шестидесяти не потому, что аптека демпингует.
Поэтому сопоставление делается в несколько слоев:
- Прямое совпадение по коду. Если на площадке есть внутренний идентификатор карточки товара, это самый надежный путь. Один товар – одна карточка – список аптек с ценами.
- Нормализация названия. Название приводится к единому виду: убираются лишние символы, унифицируются сокращения, отдельно выделяются дозировка, количество в упаковке и форма выпуска.
- Сравнение по нормализованным признакам. Совпадение считается действительным, только если совпали и действующее вещество, и дозировка, и количество. Иначе позиция уходит в отдельный список “требует проверки”.
Этот последний список – принципиальная вещь. Автоматика не имеет права молча подставлять сомнительные совпадения: одно ошибочное сопоставление, и клиент опустит цену там, где этого делать не надо. Лучше честно сказать “здесь я не уверен”, чем подсунуть красивое, но неправильное число.
Фильтр по доставке
Клиенту не интересны все аптеки страны. Ему интересны те, у кого покупатель реально может заказать с доставкой, то есть те, с кем он конкурирует за одну и ту же корзину. Поэтому в сбор заложен фильтр по способу получения и региону. Это заметно сокращает список и делает отчет пригодным к действию, а не просто большим.
Как выглядит отчет
Выгрузка делается два раза в неделю. Это не просто таблица цен, а таблица с выводами:
- название позиции и моя цена;
- минимальная цена среди конкурентов с доставкой и сколько таких конкурентов;
- разница в гривнах и в процентах;
- цветовая подсветка: красное – я существенно дороже, зеленое – я самый дешевый, желтое – разница в пределах погрешности;
- отдельный лист с позициями, где сопоставление не удалось и нужен глаз человека.
Смысл цвета простой: владелец открывает файл и за тридцать секунд видит, куда смотреть. Длинные таблицы без приоритетов никто не читает дальше второй недели.
Техническая сторона
Нагрузка на источник
Ассортимент даже небольшой аптеки – это тысячи позиций. Тупой обход каждой позиции отдельно – это и долго, и невежливо по отношению к сайту. Поэтому сбор построен так, чтобы брать максимум информации за минимум запросов, и разнесен по времени. Скорость здесь не самоцель: отчет нужен два раза в неделю, а не за минуту.
Стабильность
Агрегаторы регулярно меняют верстку и внутренние адреса. В парсер заложены проверки на адекватность результата: если вдруг у половины товаров исчезла цена или количество найденных конкурентов обвалилось в разы, я получаю уведомление и проверяю, что изменилось на сайте, до того как клиент увидит странный отчет.
История
Каждая выгрузка сохраняется. Через несколько месяцев появляется то, чего не дает ни один разовый срез: видно, кто из конкурентов системно демпингует, кто поднимает цену следом за вами, а кто вообще не следит за рынком.
Когда мониторинг окупается
Разработка здесь – это сопоставление товаров, фильтры и отчет, а дальше ежемесячная поддержка: площадка меняется, и парсер нужно держать в рабочем состоянии. Окупится ли это, зависит не от сложности задачи, а от оборота.
- Разобраться в площадке – это уже половина работы. Когда известно, как она устроена и как корректно брать данные, следующее подключение под похожую задачу идет заметно быстрее.
- Одна и та же сумма для разных бизнесов весит по-разному. Для магазина с большим оборотом, где каждый процент цены заметен в выручке, мониторинг окупается за первые недели. Для небольшого ассортимента дешевле просматривать цены руками раз в неделю.
- Сначала посчитайте потери. Сколько заказов вы не получаете из-за завышенной цены и сколько маржи отдаете там, где самые дешевые без необходимости. От этого числа и стоит отталкиваться.
Кому нужен мониторинг цен
Лучше всего это работает там, где выполняются два условия: товар сравнимый и покупатель видит цены рядом. Аптеки, электроника, автозапчасти, бытовая химия, стройматериалы – классика. Если у вас уникальный товар, мониторинг конкурентов мало что даст.
Второе условие – готовность что-то делать с результатом. Мониторинг сам по себе не приносит денег. Деньги приносит решение: поднять цену там, где вы самый дешевый без нужды, и опустить там, где вы на пятом месте в выдаче и не получаете заказов.
С чего начать
Минимальный вариант – разовая выгрузка по вашему ассортименту. Вы видите реальную картину, понимаете, есть ли вообще разница, и уже потом решаете, нужно ли регулярное наблюдение. Это более честный путь, чем сразу подписываться на ежемесячную поддержку.
Дальше, если картина интересная, настраивается расписание: раз в неделю, два раза в неделю, ежедневно – по потребности. Подробнее о направлении есть на странице парсинг сайтов с защитой от ботов и в других разборах блога.
Опишите свой случай: какая площадка, сколько позиций, как часто нужны данные. За короткий разговор я скажу, решается ли задача и сколько это будет стоить.
