• Блог и Новости
  • Роботы для мониторинга цен конкурентов и посредников в интернет-магазинах

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

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

Чем мониторинг цен полезен в бизнесе?

Для анализа конкуренции на рынке:

Мониторинг цен позволяет компаниям корректировать цены на свои продукты в соответствии с тем, что происходит на рынке. Вот несколько сценариев:

Компания, которая продает кроссовки, условно, по 3000 рублей за каждую пару, потеряет клиентов, если конкуренты будут продавать обувь такого же типа и качества всего за 200 рублей.

Эта компания также потеряет (скорее недополучит) деньги, если клиенты захотят купить те же кроссовки за 10 000 рублей. Как компания может понять, что она не сталкивается ни с одним из этих сценариев? С помощью мониторинга цен.

Для контроля установления рекомендованной цены посредниками:

Установление рекомендованных цен основано на том, что производитель декларирует цену своего товара напрямую конечному потребителю. Таким образом, посредник «получает» процент торговой наценки от производителя, а не назначает ее сам. Это возможно тогда, когда производитель имеет значительную рыночную силу свой марки. Но даже в этом случае производитель не всегда имеет гарантию того, что посредники будут придерживаться рекомендованных цен. Именно поэтому необходим мониторинг цен.

Благодаря мониторингу цен можно:

• устанавливать конкурентоспособные цены;

• увеличить объемы продаж;

• договариваться с контрагентами о более выгодных условиях;

• своевременно реагировать на все изменения, которые происходят на рынке;

• знать ответы на вопросы покупателей, если последние требуют какого-то обоснования стоимости.

Мониторинг цен может позволить сделать интернет-магазин более привлекательным и доступным для покупателей.

Существует несколько способов, которые помогают следить за стоимостью товаров и услуг у конкурентов в интернете.

Мониторинг своими силами

Для того, чтобы следить за ценами интернет-магазинов нужно регулярно посещать их сайты, вручную заходя на страницу товара в интернет-магазине собирать цены, записывая их к примеру, в таблицу Excel. Эта процедура занимает много времени и сил. В случае, если у вас много товаров и хотя бы 5+ конкурентов, понадобится отдельный штат сотрудников, которые будут заниматься только этим вопросом.

Автоматический сбор цен

Автоматический сбор цен подразумевает робота, который в заданные интервалы времени заходит на страницы, собирает цены и сохраняет их. В этом случае скорость работы очень высока и один раз разработав подобное приложение необходимость возникает лишь в поддержке. Робот сам в нужное время будет проходить по всем заданным страницам, собирать цены и как пример отправлять готовый сформированный результат на е-мейл ответственному лицу.

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

Выбор инструментов

Так-как большинство современных интернет-магазинов частично или полностью задействуют функции рендеринга контента на стороне клиента (работа с динамическим DOM) (например, Angular / React с запросом цены конкретного товара через API). То, что для получения цены товара недостаточно просто скачать страницу с товаром и вытащить цену по селектору. Сбор данных необходимо проводить с помощью браузера, которым управляет приложение.

Существуют сервисы, которые выполняют всю необходимую работу по запуску браузера, отработки javascript и отдачи контента через API, без необходимости самому разворачивать инфраструктуру и разрабатывать приложение доставки данных, к примеру Scraping-Bot, Scrapeworks, Diggernaut, ScrapingBee, Scraper API. Данные решения часто не подходят по следующим причинам:

  1. Очень высокая цена на единицу данных (к примеру цена одного товара 2 раза за день, утром и вечером, товаров может быть и 500, а магазинов, на которые мы хотим реагировать - 15). Получается в день нам нужно покупать запросов - 2 раза по 7500 или 15000.
  2. Недостаточные возможности конфигурирования. Например, изменение региона магазина перед сбором цены.
  3. Раскрытие информации сборщику, например списка продуктов, таргетных магазинов и так-далее.

Чтобы избежать ограничений и создать гибкое решение, мы предпочли написать собственный сценарий. Связанное программное обеспечение было в основном разработано на Angular (Typescript), поэтому мы выбрали NodeJS + Typescript для серверной части парсера.

В качестве средства автоматизации браузера была выбрана библиотека NigthmareJS ввиду простоты работы, полной поддержки HTML5, и возможности расширения. NigthmareJS позволяет открыть экземпляр Electron на движке Chromium. Так-как используется Chromium, в управляемом экземпляре веб-сайт работает как и в других браузерах работающих с javascript, поэтому динамическое содержимое отображается на странице и может быть извлечено для последующих манипуляций с данными.

Решение

Управляющие команды являются цепочками, каждая из команд возвращает промис, что позволяет писать в стиле промисов, асинк функций или генераторов. После загрузки страницы nightmare инжектит управляющий код на JavaScript в экземпляр страницы, который позволяет использовать команды подражающие действия пользователя браузера, такие как: Goto, Type, Click и пр.
Также есть возможность включить в код выполнения собственные команды напрямую работающие с Chromium devapi.

Простейший код выглядит следующим образом:

Краткое текстовое объяснение кода

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

Структура парсера

  1. Загрузить список товаров и необходимых магазинов
  2. Загрузить библиотеку управления браузером
  3. Перейти по очереди по всем необходимым ссылкам
  4. Дождаться что страница загрузилась (селектор с ценой присутствует на странице) или же присутствуют другие ключевые селекторы (например селектор с ошибкой)
  5. Забрать данные из нужного блока
  6. При необходимости обработать данные, структурировать и сохранить (или отправить) получившуюся информацию в удобном формате.

Какова структура нашего решения?

  • Загрузить nightmare
  • Перейти по необходимому URL
  • Дождаться, что селектор с ценой присутствует на странице или же присутствуют другие ключевые селекторы (например селектор с ошибкой)
  • Забрать получившийся HTML
  • Распарсить цену, используя, к примеру, Cheerio

Основные проблемы

Блокировки

На большинстве сайтов настроена базовая или продвинутая защита от автоматического сбора данных. Если базовую можно обойти с помощью прокси серверов с контролем количества обращений к сайту, то к продвинутой можно отнести, к примеру, размещение сайта за CloudFlare. В этом случае обычно не обойтись без применения сервисов, которые решают капчу по API.

Превышение времени ожидания

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

Изменения стилей

Довольно часто сайты меняют структуру html. В связи с динамически изменяющимися условиями конфигурацию робота нужно вынести по крайней в файл, где будут указаны параметры, по которым робот будет доставать информацию с конкретного сайта. Конфигурация, к примеру может содержать следующие параметры: название сайта, селектор необходимой цены, селектор ошибки сайта (если мы поймаем ошибку, нам нужно это понять).

Это позволит нам динамически изменять конфигурацию робота при изменении структуры сайта. Если клиент обладает навыками css и способен сам выделить нужный селектор, данный конфиг можно вынести в админку или по крайней мере в Google Spreadsheet документ, где клиент сам сможет установить нужные селекторы, это экономит кучу времени бизнесу при небольших изменениях и уберет необходимость обращаться к разработчику для внесения небольших изменений в конфигурацию робота.

Организация очереди и параллельное выполнение

Безусловно если нам нужно получить цену 500 товаров с 20 интернет-магазинов, нам необходимо собирать данные параллельно, одновременно с нескольких ресурсов. В среднем сбор данных с одной страницы сайта занимает около 1-3 секунд без использования headless browser, и около 5-7 с использованием оного. Для организации очереди можно использовать готовые библиотеки по типу queue-promise для NodeJS.

Накладные расходы на запуск

Необходимо учитывать, что использование headless browser — это большая нагрузка на оперативную память. Так-как под капотом chromium, в среднем желательно иметь от 400 мегабайт памяти под один процесс робота на сервере. Опытным путем установлено, что при недостатке памяти приложение по сбору данных не закрывается с ошибкой, а начинает работать с низкой скоростью.

Необходимость развертывания с XVFB

Так, как мы используем Chromium, ему необходимо отрисовывать результат работы. На серверах необходимо использовать XVFB. XVFB это сервер дисплея, реализующий протокол сервера дисплея X11. В отличие от других серверов отображения, Xvfb выполняет все графические операции в виртуальной памяти, не показывая никакого вывода на экран.

Для развертывания приложения используем докер контейнер со следующим содержимым, который установит все зависимости NodeJS приложения и XVFB:

За запуск приложения отвечает sh скрипт, который использует xvfb-run.

Выбор региона магазина

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

Для инжекта куки в nightmare, перед использованием библиотеки

И далее, чтобы загрузить куки в инстанс используем

Отлов ошибок

Каждый вызов действия будет либо совершен, либо произойдет выброс исключительной ситуации, а потому в местах, где нет уверенности, что код выполнится 100% нужно обертывать запросы в try catch и обрабатывать из соответственно. Как пример wait(selector) данная инструкция даст команду приостановить выполнение скрипта до появления html элемента с соответствующим CSS селектором, но в модуле есть дефолтный таймаут, его можно изменять опционально, при наступлении которого будет выброшено исключение, соответственно можно будет обработать почему на странице нет чего-либо и как-то на это среагировать.

ИТОГ

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

Роботы для мониторинга цен конкурентов позволяют компаниям автоматизировать изменение цен сразу на тысячи товаров. Они не просто изменяют цены, но делают это разумно. Цены конкурентов, наличие на складе, рыночный спрос и ряд других факторов – все это принимается во внимание. С помощью этих инструментов мониторинга цен вы можете сосредоточиться на других, не менее важных бизнес-процессах.

Автор
Дмитрий Ропотан, Tech Lead, E-commerce

Дмитрий - старший эксперт с опытом работы в IT более 9 лет. Он имеет большой опыт работы в международных компаниях и в многонациональных распределенных командах разработчиков, реализовал множество проектов в сфере электронной коммерции, порталов B2B и B2C.

Вернуться