Парсер цен экономит часы ручной сверки: вместо того чтобы каждый день открывать десяток сайтов конкурентов и переписывать цифры в таблицу, скрипт сам обходит каталоги, вытягивает цены и складывает их в отчёт с расхождениями. Под такие задачи беру 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 такой процесс не запустить.