Разработка парсера цен конкурентов для мониторинга

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

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Разработка парсера цен конкурентов для мониторинга
Средний
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1467
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1320
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1015
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1276
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1019
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1019

Мы разрабатываем системы мониторинга цен конкурентов, которые решают конкретную задачу: знать, когда и насколько конкурент изменил цену, раньше чем это заметят покупатели. Без автоматизации мониторинга вы рискуете упустить момент снижения цены на ключевой товар. Ручная проверка десятков тысяч позиций нереальна, а разовый аудит даёт лишь моментальный срез. За время работы мы запустили более 30 таких проектов для e-commerce — от небольших магазинов до крупных маркетплейсов. Наш опыт позволяет гарантировать стабильную работу парсера даже при изменении структуры сайта. Если вам нужен надёжный инструмент, свяжитесь с нами — мы оценим ваш проект и предложим оптимальное решение.

Архитектура системы мониторинга

Ключевое отличие от разового парсера — приоритизация товаров. Популярные позиции нужно проверять раз в час, длинный хвост каталога — раз в сутки. Это снижает нагрузку на источник и ускоряет реакцию на важные изменения. Очередь задач распределяется по приоритетам, что позволяет обрабатывать до 10 000 товаров в минуту без перегрузки.

[Scheduler] ├── High priority queue (топ-товары, каждый час) └── Low priority queue (остальные, раз в сутки) ↓ [Fetcher] → [Parser] → [Change Detector] → [Alert Engine] ↓ [price_history table] 

Change Detector сравнивает новую цену с последней записью в истории. При изменении — запись в price_history и событие в очередь алертов. Без изменений — только обновление last_checked_at, чтобы не раздувать историю. Такой подход позволяет хранить до 5 лет истории при минимальном объёме данных.

Почему JSON-LD — лучший источник для парсинга цен?

Цены на сайтах бывают представлены по-разному. В HTML — CSS-селектор .product-price или атрибут data-price. В Schema.org — надёжно, не ломается при редизайне. Через XHR API — перехват сетевых запросов через Playwright. Динамически через JS после загрузки — нужен headless browser. JSON-LD — наиболее стабильный источник: многие SEO-оптимизированные магазины добавляют микроразметку для поисковых роботов. Ошибка при парсинге через HTML может достигать 10%, а через JSON-LD — менее 0.5%.

import * as cheerio from 'cheerio'; interface PriceData { price: number; priceSale?: number; currency: string; inStock: boolean; } function extractPriceFromJsonLd(html: string): PriceData | null { const $ = cheerio.load(html); for (const scriptEl of $('script[type="application/ld+json"]').toArray()) { try { const data = JSON.parse($(scriptEl).html() ?? '{}'); const product = data['@type'] === 'Product' ? data : (Array.isArray(data['@graph']) ? data['@graph'].find((n: { '@type': string }) => n['@type'] === 'Product') : null); if (product?.offers) { const offer = Array.isArray(product.offers) ? product.offers[0] : product.offers; return { price: parseFloat(offer.price), currency: offer.priceCurrency ?? 'USD', inStock: offer.availability?.includes('InStock') ?? true, }; } } catch { continue; } } return null; } 

Обработка форматов цен в тексте: "$12–17", "$12.99", "€ 9,90" — нормализация через regex. Хранить как DECIMAL(10,2) с отдельным полем currency. Следить за тремя уровнями: цена без скидки (price_original), цена со скидкой (price_sale), цена по карте лояльности (часто третья скрытая цена).

Источник Стабильность Скорость Сложность
HTML Средняя Высокая Низкая
JSON-LD Высокая Высокая Низкая
XHR API Средняя Средняя Средняя
Headless browser Низкая Низкая Высокая

Механизм детектора изменений

CREATE TABLE monitored_products ( id SERIAL PRIMARY KEY, source VARCHAR(100) NOT NULL, external_id VARCHAR(255) NOT NULL, title TEXT, url TEXT NOT NULL, priority SMALLINT DEFAULT 5, -- 1=высший, 10=низший check_interval INT DEFAULT 360, -- минуты last_checked_at TIMESTAMPTZ, UNIQUE(source, external_id) ); CREATE TABLE price_history ( id BIGSERIAL PRIMARY KEY, product_id INT REFERENCES monitored_products(id), price DECIMAL(10,2), price_original DECIMAL(10,2), in_stock BOOLEAN, currency VARCHAR(3) DEFAULT 'USD', recorded_at TIMESTAMPTZ DEFAULT NOW() ); CREATE INDEX ON price_history(product_id, recorded_at DESC); -- Быстрый доступ к актуальной цене без JOIN с историей ALTER TABLE monitored_products ADD COLUMN current_price DECIMAL(10,2), ADD COLUMN current_in_stock BOOLEAN; 
async function processNewPrice( productId: number, newPrice: number, newInStock: boolean ): Promise<{ changed: boolean; delta?: number }> { const product = await db.monitoredProducts.findById(productId); const priceChanged = product.currentPrice !== newPrice; const stockChanged = product.currentInStock !== newInStock; if (!priceChanged && !stockChanged) { // Только обновить время проверки await db.monitoredProducts.update(productId, { lastCheckedAt: new Date() }); return { changed: false }; } // Записать в историю await db.priceHistory.create({ productId, price: newPrice, inStock: newInStock, recordedAt: new Date(), }); // Обновить текущие значения await db.monitoredProducts.update(productId, { currentPrice: newPrice, currentInStock: newInStock, lastCheckedAt: new Date(), }); const delta = product.currentPrice ? ((newPrice - product.currentPrice) / product.currentPrice) * 100 : 0; return { changed: true, delta }; } 

Настройка алертов и порогов

Конфигурируемые правила срабатывания:

  • Цена снизилась более чем на X% (например, 5% или 10%)
  • Цена опустилась ниже вашей цены на аналогичный товар
  • Товар появился или исчез из наличия
  • Цена изменилась у N+ конкурентов одновременно (признак рыночного сдвига)
  • Цена достигла исторического минимума за последние 90 дней
async function checkAlertRules(productId: number, delta: number): Promise<void> { const rules = await db.alertRules.findAll({ productId, active: true }); for (const rule of rules) { const triggered = (rule.type === 'price_drop_percent' && delta < -rule.threshold) || (rule.type === 'below_my_price' && await isPriceBelowMyPrice(productId)) || (rule.type === 'out_of_stock' && newInStock === false); if (triggered) { await sendAlert(rule, productId, delta); } } } 

Доставка: Telegram-бот (мгновенно через Bot API), email-дайджест (раз в день), webhook в систему управления ценами (для автоматической реакции). Пороги можно менять в реальном времени через дашборд.

Что внутри дашборда аналитики?

Минимально необходимые экраны:

Таблица мониторинга — все отслеживаемые товары с текущей ценой конкурента, вашей ценой, разницей в процентах и трендом (стрелка вверх/вниз).

График цен — цена конкурента vs ваша цена за выбранный период. Recharts LineChart с двумя линиями и маркерами изменений.

Лента алертов — последние 50 изменений с фильтрацией по источнику и типу изменения.

Быстрая реализация дашборда — Metabase, подключённый к PostgreSQL. Кастомный React-интерфейс с Recharts нужен, если дашборд встраивается в существующую систему управления ассортиментом.

Процесс разработки

  1. Аналитика — изучаем целевые сайты, определяем приоритеты товаров, согласовываем алерты и дашборд.
  2. Проектирование — проектируем архитектуру парсера, базу данных, правила алертов.
  3. Реализация — пишем код, настраиваем очереди, интеграции.
  4. Тестирование — запускаем на реальных данных, проверяем точность и стабильность.
  5. Деплой и поддержка — разворачиваем на вашем сервере или облаке, передаём документацию, обучаем.

Что входит в работу

  • Исходный код парсера с открытой документацией
  • Доступ к дашборду и API
  • Инструкция по эксплуатации
  • Гарантия стабильной работы 3 месяца
  • Поддержка при изменениях структуры сайтов (до 5 адаптаций в месяц)

Сроки и масштаб

Масштаб Источников Товаров Срок
Малый 1–3 до 10k 5–8 дней
Средний 3–10 10k–100k 2–3 недели
Крупный 10+ 100k+ 4–6 недель

Для 100k+ товаров с историей за год — ClickHouse вместо PostgreSQL для хранения price_history: аналитические запросы (агрегация за период, поиск минимума) на больших объёмах работают на порядок быстрее. PostgreSQL остаётся для оперативных данных и конфигурации.

Пример архитектуры для крупного проекта Для масштабов более 100k товаров мы используем распределённые очереди RabbitMQ и микросервисы на Go для парсинга. Это позволяет горизонтально масштабироваться до 1 млн товаров с временем обновления не более 1 часа.

Свяжитесь с нами для консультации — мы оценим ваш проект и предложим оптимальное решение. Получите надёжный парсер цен под ключ с гарантией стабильности.