Разработка · 6 мин чтения

Парсер цен: мониторинг конкурентов и отчёт по расхождениям

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

Зачем нужен мониторинг цен конкурентов

Розничная наценка на многих товарных категориях узкая, и разница в 5-7% с ближайшим конкурентом решает, купят у вас или уйдут сравнивать дальше. Без регулярной сверки эту разницу замечают поздно: конкурент снизил цену в понедельник, а магазин узнаёт об этом через месяц из отчёта по продажам, когда упавшая конверсия уже съела маржу.

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

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

Как устроен парсер цен: от запроса до цифры в таблице

Для сайтов, где цена лежит прямо в HTML-разметке страницы, хватает связки requests и BeautifulSoup на Python: скрипт запрашивает страницу товара, разбирает вёрстку и вытягивает нужный элемент по CSS-селектору или классу.

import requests
from bs4 import BeautifulSoup

response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}, timeout=10)
soup = BeautifulSoup(response.text, "html.parser")
price = soup.select_one(".product-price").get_text(strip=True)

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

Часть каталогов подгружает цену через JavaScript уже после загрузки страницы, обычный HTTP-запрос в этом случае вернёт пустое место вместо цифры. Для таких сайтов беру Playwright: он поднимает headless-браузер, дожидается, пока скрипты на странице отработают, и только потом забирает готовый DOM с ценой. Работает медленнее прямого запроса, зато не зависит от того, как именно верстальщик решил вывести цифру на страницу.

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Отчёт по расхождениям цен: что фиксирую по каждому товару

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

Поле Пример
Артикул 4521
Наша цена 3 200 ₽
Цена конкурента 2 950 ₽
Разница -8%
Дата фиксации 09.09.2026

Порог, после которого позиция попадает в отдельный список «требует внимания», задаём вместе с заказчиком, обычно это отклонение в 5-10% от своей цены. Пункты с меньшим расхождением остаются в общей таблице и не отвлекают от действительно проблемных позиций. Готовую таблицу выгружаю в Google Таблицы или в CSV, оттуда её удобно забирать в систему аналитики или CRM.

Автоматизация обновлений и уведомления в Telegram

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

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

Стоит сразу сказать: и cron-планировщику, и постоянно работающему n8n-сценарию для Python-скрипта нужен отдельный сервер, обычный хостинг сайта на Tilda или WordPress под это не годится. Это отдельная арендуемая машина, её нужно настраивать, обновлять и оплачивать ежемесячно, я закладываю это в оценку проекта отдельной строкой.

Устойчивость парсера к блокировкам

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

Парсер настраиваю так, чтобы не выглядеть как нагрузочный тест: между запросами держу паузу и небольшой случайный разброс по времени, честно указываю User-Agent, соблюдаю robots.txt и ограничения по частоте запросов, которые сайт заявляет сам. Для крупных каталогов с сотнями позиций подключаю ротацию IP через пул прокси, это снижает число ложных блокировок, когда сайт принимает частый интерес к каталогу за атаку.

Если конкретная страница всё равно систематически не отдаётся, скрипт логирует такие случаи отдельно, а не падает молча. По этим позициям дешевле раз в неделю свериться вручную, чем городить сложную инфраструктуру ради десятка товаров.

Сколько стоит парсер цен

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

Парсинг и автоматизация на Python: от 20 000 ₽, это база под сбор данных с нескольких сайтов и выгрузку отчёта. Если нужен отдельный Telegram-бот с уведомлениями о критичных отклонениях: от 30 000 ₽. Когда весь процесс собираю в единый сценарий на n8n со связкой парсера, отчёта и рассылки: от 25 000 ₽ за настройку автоматизации сверх самого парсера.

Итоговую сумму называю после того, как вижу список сайтов конкурентов и смотрю, насколько сложно у них устроена вёрстка каталога: у кого-то цена лежит открытым текстом в HTML, а у кого-то спрятана за несколькими уровнями JavaScript.

Частые вопросы

Как часто нужно обновлять данные о ценах конкурентов?

Зависит от товарной категории. Для сегментов с частыми акциями и высокой конкуренцией беру интервал в несколько часов, для спокойных ниш хватает раз в сутки или через день. Слишком частый обход без необходимости только увеличивает нагрузку на сайты конкурентов и риск блокировок, не давая заметной пользы.

Можно ли собирать цены конкурентов без разрешения?

Публичные цены на страницах товаров, доступные любому посетителю без авторизации, собирать можно, это открытая информация, а не защищённые данные. Ограничения касаются частоты запросов и соблюдения robots.txt конкретного сайта, а не самого факта сбора видимых цен. Персональные данные покупателей парсер не собирает и не должен собирать.

Что делать, если сайт конкурента защищён от автоматических запросов?

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

Нужен ли отдельный сервер для парсера цен?

Для разового или редкого запуска скрипт можно гонять вручную с рабочего компьютера. Если нужен регулярный автоматический обход по расписанию и мгновенные уведомления, Python-скрипту нужна своя рабочая среда, обычный виртуальный сервер, который отдельно оплачивается и обслуживается, на общем хостинге сайта на Tilda или WordPress такой процесс не запустить.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно