Парсинг сайтов, анализ и мониторинг цен конкурентов на Python

Парсинг сайтов, анализ и мониторинг цен конкурентов на Python

10 сентября 2024

В условиях ожесточенной конкуренции на потребительском рынке ценообразование магазина зависит от предложений множества ритейлеров. Ценовое предложение одного товара может динамически меняться несколько раз за день. Каждый продавец стремится привлечь покупателей, проводя маркетинговые акции, снижая цены на популярные категории номенклатуры. При отсутствии аналогичного товара у конкурентов, напротив, можно повышать стоимость. Чтобы сохранять репутацию и постоянных покупателей, товароведы вынуждены анализировать цены и ассортимент на рынке. Своевременно корректировать предложения крайне затруднительно без компьютерных алгоритмов, особенно если на складе лежит товар тридцати тысяч наименований.

! в круге

Разработаем парсеры на Python, Java, PHP или C# под .NET.

Сервис решает следующие задачи:

  • экономическая разведка;
  • конкурентная разведка;
  • сравнение цен конкурентов;
  • мониторинг РРЦ и РМЦ для брендов;
  • ценообразование магазина;
  • сервис аналитики маркетплейсов;
  • мониторинг наличия товара на полке.

Как это работает?

Сервис аналитики маркетплейсов круглосуточно сканирует несколько сотен интернет-магазинов, продающих электронику и бытовую технику, детские и спортивные товары, стройматериалы, книги, одежду, ювелирные изделия и многое другое. К парсингу сайтов подключены крупнейшие, содержащие более 10 миллионов товаров, такие как Авито, Ozon, Маркет и Wildberries. Всего было разработано почти 700 парсеров на питоне. Заказчиками являются всем известные компании из России и Европы.

i в круге

Пополнение базы, обновление цен, ассортимента и остатков автоматизировано периодическим «парсингом» (скрэпингом) сайтов — так называемых «доноров» информации.

Товары клиента сопоставляются с товарами конкурентов в полуавтоматическом режиме.

  • Анализ текстов наименований и описаний с учетом морфологии языка.
  • При помощи «асессоров» — операторов, выбирающих точную товарную пару из упорядоченных по релевантности вариантов, предложенных системой. В качестве асессоров могут быть задействованы как работники клиента, так и за дополнительную плату сотрудники сервиса.

Результаты мониторинга цен на товары:

  • списки изменившихся цен на аналоги и идентичные товары;
  • данные о наличии аналогов и идентичных товаров;
  • полные выгрузки каталога товаров;
  • частичные выгрузки по критериям выборки.

Данные мониторинга доступны:

  • в личном кабинете;
  • в виде периодических выгрузок CSV, XLSX, JSON, XML;
  • в виде кастомизированных выгрузок.

Архитектура

Личный кабинет клиента реализован на основе фреймворка Django, на языке Python. Данные хранятся в децентрализованном хранилище на основе PostgreSQL. Парсеры запускаются в локальном облаке внутри docker-контейнеров. Обмен файлами между процессами, запущенными на разных серверах, организован благодаря сетевому хранилищу — shared folder over network. Вертикальное и горизонтальное масштабирование сервиса осуществляется посредством балансировщика Nginx. Код парсеров запускается на разных серверах в рамках ограниченной очереди задач посредством планировщика Celery. Браузеры Chrome и Firefox запускаются в контейнерах на разных серверах Selenium-фермы.

Ниже представлена рекомендуемая конфигурация серверного оборудования для подобного сервиса на заграничном хостинге. На двух фермах одновременно запускается до 350 браузеров, примерно по 15 штук на каждый сервер фермы.

01 Сервер веб-приложений Сервер веб-приложений
  • 24 CPU.
  • 128 Gb RAM.
  • 2 Tb SSD.
02 Сервер баз данных Сервер баз данных
  • 24 CPU.
  • 128 Gb RAM.
  • 2 Tb SSD.
03 Сервер парсеров Сервер парсеров
  • 24 CPU.
  • 256 Gb RAM.
  • 2 Tb SSD.
  • 8 Tb HDD.
04 Selenium- или Selenoid-ферма с USB-модемами. Selenium- или Selenoid-ферма с USB-модемами
  • 1 балансировщик, 10 серверов с браузерами.
  • CPU с 14–24 ядрами.
  • RAM 12–64 Gb.
05 Selenium- или Selenoid-ферма, использующая прокси Selenium- или Selenoid-ферма, использующая прокси
  • 1 балансировщик, 10 серверов.
  • CPU с 14–24 ядрами.
  • RAM 12–64 Gb.

Классификация прокси

Одним из основных способов разблокировки защиты сайта для последующего скрэпинга является исходящий трафик с разных IP-адресов. Схема доступа подбирается индивидуально для каждого сайта-донора. Кому-то потребуется большой массив IP-адресов, где-то достаточно регулярно делать паузы. Сетевая технология доступа с чужого адреса называется прокси-сервер. В отличие от HTTP-прокси-серверов, SOCKS- передает все данные от клиента, ничего не добавляя от себя, то есть, с точки зрения конечного сервера данные, полученные им от SOCKS-прокси, идентичны данным, которые клиент передал бы напрямую без проксирования.

Процесс

По прикладному протоколу разделяем на HTTP-, SOCKS4- или SOCKS5-прокси, а по сетевому протоколу — на IPv4- или IPv6-прокси.

Способ оплаты

01 бесплатные Бесплатные.
02 с ограничением по трафику Прокси без ограничений по трафику с фиксированной абонентской платой.
03 с платой за пакет трафика С абонентской платой за пакет трафика и оплатой превышающего трафика.

Тип серверных устройств

01 Выделенные Выделенные
  • Серверы в дата-центрах.
02 Мобильные Мобильные
  • Приложения на смартфонах.
  • USB-адаптеры с SIM-картой.
  • Маршрутизаторы с SIM-картой.
  • Маршрутизаторы с несколькими SIM-картами или несколькими USB-портами.
03 Резидентные Резидентные
  • Маршрутизаторы интернет-провайдеров в многоквартирных домах.
  • Легальное ботнеты на компьютерах пользователей сети интернет.
  • Серое вредоносное ПО на машинах.

Рекомендуем

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

01 Выделенные прокси Выделенные прокси
  • PROXY6.NET
  • FineProxy
02 Мобильные прокси Мобильные прокси
  • MobileProxy.space
  • proxyzzz.com
  • SOAX
  • bright data
03 Резидентные прокси Резидентные прокси
  • SOAX
  • bright data

Антикапча

«Completely Automated Public Turing test to tell Computers and Humans Apart» — полностью автоматизированный публичный тест Тьюринга для отличия компьютеров от людей. Этим определением капчи, в общем-то, все сказано.

Капча

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

i в круге

ruCaptcha и Anti-Captcha — наиболее качественные сервисы.

Парсинг

Пополнение базы, обновление наличия и цен товаров осуществляется посредством периодического парсинга интернет-магазинов. Обновление цен — посредством частичного парсинга заранее известных URL, полученных в результате поиска товарных пар в магазинах конкурентов.

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

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

Аттракцион невиданной щедрости

Использование кодов EAN большая редкость. Магазины чаще идентифицируют товар с помощью внутреннего выдуманного кода. Некоторые торговцы «грешат» повторным использованием артикулов, причем для абсолютно разных товаров. Так, например, данные мониторинга цен подменили товар с артикулом «134-ADC» и магазин начал продавать айфоны по цене пиццы.

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

  • планирование запуска парсеров;
  • мониторинг состояния парсеров;
  • мониторинг ошибок.

Планировщик

На странице представлен список клиентов, для которых запланирован запуск парсеров. В списке планировщика доступны следующие сведения.

  • Время, прошедшее с завершения работы парсеров.
  • Запланированные дата и время очередного запуска парсеров.
  • Наименование клиента.
  • Режим парсинга информации.
  • Процент завершения парсинга, рассчитанный по количеству успешно отработавших парсеров.
  • Процент устаревания данных личного кабинета клиента.
Инспектор - планировщик парсинга

При выборе записи планировщика показывается перечень парсеров:

  • наименование магазина;
  • дата и время последнего запуска;
  • режим парсинга таблицы — полный или частичный;
  • статус завершения и наличия ошибок.

На странице перечня действий с парсерами:

  • ручной запуск;
  • остановка.

Журнал сессий

Показывает историю запусков и результатов работы парсеров, а также парсеры, запущенные сейчас.

Список сессий содержит:

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

В правом верхнем углу — фильтрация сессий по:

  • успешному завершению;
  • критическому сбою;
  • активности сессии.
Инспектор - журнал сессий парсеров

Лог реального времени

Клик по времени завершения сессии загрузит архив с логами отработавшего парсера. Если сессия активна, в браузере открывается текстовый лог реального времени (runtime log).

Сообщения парсера содержат:

  • время возникновения события;
  • наименование модуля;
  • уровень логирования: DEBUG, INFO, WARN, ERROR;
  • текст сообщения.

Заголовок окна лога реального времени включает:

  • название парсера;
  • время работы парсера;
  • количество найденных товаров;
  • количество ошибок;
  • кнопку остановки.
Лог реального времени

Selenium-ферма

Некоторые сайты-доноры реализованы на реактивных JavaScript-фреймворках, таких как Angular, Vue.js, React. Интернет-магазины, реализованные на основе предыдущего поколения веб-технологий, программисты стараются усовершенствовать.

Контент реактивной страницы формируется JavaScript-кодом непосредственно в браузере пользователя и не доступен в исходном HTML-коде. Парсинг динамических сайтов посредством выполнения HTTP-запросов будет либо сильно ограничен, либо совсем невозможен.

Для скрэпинга динамических сайтов применяются браузеры Chrome или Firefox с технологией автоматизации браузера. Автоматизация позволяет обходить защиты от ботов, имитируя действия реального пользователя. Браузеры запускаются в docker-контейнерах на множестве серверов Selenium-фермы. Вместо загрузки HTML-страниц код парсера отправляет команды браузеру через Selenium API.

Selenium-ферма
Пример «украинских» мобильных прокси

Пакет Selenoid на языке Go предоставляет веб-интерфейс с перечнем запущенных VNC-сессий, благодаря чему окно браузера просматривается в реальном времени.

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

Пример парсинга
Детальное окно парсинга

Основное назначение и Selenium, и Selenoid — это автоматизированное тестирование программного обеспечения. Продвинутая защита определит Selenium.

Кроме Selenium созданы Pupetter от Google и Playwright от Microsoft, которые взаимодействуют с тестируемым браузером через веб-сокет и протокол DevTools. С одной стороны, «кукловод» и «драматург» меньше подвержены обнаружению. С другой стороны, в них нельзя выполнить действия, запрещенные политиками безопасности JavaScript.

Если сайт проверяет отпечаток браузера, то для борьбы с его защитой используем кастомизированный браузер Dolphin{anty}.

Ферма модемов
Пример «подпольной» мобильной прокси-фермы

Личный кабинет

На главной странице личного кабинета клиента представлен список магазинов, включающий:

  • логотип и наименование магазина;
  • общее количество товаров;
  • среднюю цену товара;
  • дату и время последнего парсинга страниц.
Личный кабинет - список площадок подключенных к мониторингу

Каталог товаров

Представлен перечень товаров, полученных в результате парсинга магазинов клиента и конкурентов, парсинга картинок. Просмотр каталога в режимах таблицы и плиток (grid). В режиме таблицы показываются расширенные параметры.

  • Наименование магазина.
  • Город.
  • Артикул (SKU).
  • Наименование товара.
  • Признак наличия.
  • Цена со скидкой.
  • Цена без учета скидки.
  • Размер скидки в процентах.
  • Дата обновления цены и наличия.

В режиме плиток показывается изображение товара и сокращенный набор параметров.

  • Наименование товара.
  • Изображение товара.
  • Цена со скидкой.
  • Цена без учета скидки.
  • Бренд.
  • Дата обновления цены и наличия.
Личный кабинет - каталог товаров

Полнотекстовый поиск и фильтрация товаров возможны по:

  • наименованию магазина;
  • городу;
  • категории товара;
  • бренду;
  • наличию в продаже;
  • цене (от и до);
  • размеру скидки в процентах (от и до);
  • дате мониторинга.

Страница карточки товара включает подробные сведения о товаре.

  • Наименование магазина.
  • Категория товара.
  • Изображения товара.
  • Артикул (SKU).
  • Наименование.
  • Описание.
  • Характеристики.
  • Цена со скидкой.
  • Цена без учета скидки.
  • Наличие.
  • Дата обновления цены и наличия.
  • График изменения цены за весь период мониторинга.
Личный кабинет - карточка товара

Сравнение цен конкурентов

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

Таблица сравнения цен формируется по результатам мониторинга.

  • Данные о товаре клиента (строки):
    • артикул (SKU);
    • наименование;
    • тип товарной пары — дубликат или аналог.
  • Цены на товары (столбцы):
    • наименование и город магазина;
    • минимальная цена среди всех найденных аналогов с учетом скидки.

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

  • Более высокая цена заливается оттенком красного цвета.
  • Более низкая цена заливается оттенком зеленого цвета.

Дешевле только даром

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

Разработана возможность полнотекстового поиска и фильтрации товаров по:

  • наименованию магазина;
  • категории товара;
  • городу;
  • бренду;
  • наличию;
  • отношению цены клиента к цене конкурента;
  • типу товарной пары — дубликат или аналог.

Сравнительную таблицу цен с учетом фильтров и поискового запроса можно экспортировать в форматы CSV или XLSX. В XLSX-выгрузке сохраняется цветовая заливка ячеек, аналогичная веб-версии.

Личный кабинет - сравнение цен с товарами конкурента

Карточка товара включает подробные сведения о результатах сравнения цены.

  • Данные о товаре клиента:
    • изображения товара;
    • артикул;
    • наименование;
    • описание;
    • цена со скидкой;
    • цена без учета скидки;
    • наличие в продаже;
    • дата и время мониторинга.
  • Данные о дубликатах и аналогах:
    • наименование магазина;
    • город;
    • артикул;
    • наименование;
    • тип товарной пары — дубликат или аналог;
    • цена со скидкой;
    • цена без учета скидки;
    • наличие в продаже;
    • дата и время мониторинга.
  • График сравнения цен с товарами конкурентов за весь период мониторинга.

Линейчатая диаграмма

Визуализирует результаты сравнения количества товаров клиента с более высокими и низкими ценами по отношению к аналогичным товарам. По оси абсцисс откладывается количество товаров с более высокой и более низкой ценой по отношению к аналогичным товарам. По оси ординат — перечень интернет-магазинов. Красной частью линии отмечено количество товаров клиента с более высокой стоимостью, чем у конкурентов. Зеленой — с более низкой стоимостью.

Товарную выборку можно фильтровать по:

  • категории товаров;
  • наличию;
  • типу товарной пары — аналог или идентичный товар;
  • бренду.
Личный кабинет - количественное сравнение товаров с большей и меньшей ценой

Круговая диаграмма

Визуализирует результаты сравнения количества товаров клиента с аналогичными сопоставленными товарами в сегментах разницы цен. Каждый сектор круга показывает количество товаров в сегменте. Например, количество товаров в сегменте «min–50%», где min — минимальная цена аналогичного товара из всех ценовых предложений.

Возможно фильтровать выборку по:

  • категории товаров;
  • наличию;
  • типу товарной пары — аналог или идентичный товар;
  • бренду.
Личный кабинет - количественное соотношение товаров в диапазоне цен

Коробчатая диаграмма

Визуализирует в процентном выражении результаты сравнения цен на товары клиента с ценами аналогичных товаров конкурентов. По оси абсцисс откладывается разница цен в процентах. По оси ординат — перечень интернет-магазинов. Разница цен представлена в виде «японских свечек», где усики показывают минимальное и максимальное отклонение стоимости, тело свечки отображает нижний и верхний квартиль, жирная линия внутри тела — медианная стоимость.

Возможно фильтровать выборку по:

  • категории товаров;
  • наличию;
  • типу товарной пары — аналог или идентичный товар;
  • бренду.
Личный кабинет - сравнение ценового диапазона

Линейный график

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

Возможно фильтровать выборку по:

  • категории;
  • типу товарной пары — аналог или идентичный товар;
  • бренду.
Личный кабинет - сравнительный анализ динамики цен за период

Сравнение ассортимента товаров

Сравнение ассортимента товаров в магазинах конкурентов осуществляется на основе классификатора товаров и результатов присваивания асессорами атрибутов каждому товару. В разделе «Ассортимент товаров» представлены количества продаваемых товаров и их средняя стоимость в разрезе категорий продукции в магазинах конкурентов. Товаровед анализирует ассортимент товаров в таблице и на пузырьковой диаграмме, которые расположены на одной странице.

Табличное представление включает:

  • наименование товарной категории;
  • столбцы с названиями магазинов;
  • среднюю стоимость и количество товаров в продаже для заданной категории (ячейки таблицы).

Реализована фильтрация результатов сравнительного анализа по:

  • наименованию магазина;
  • товарной категории классификатора;
  • городу;
  • бренду;
  • наличию;
  • наличию скидки;
  • стоимости товара — от и до.

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

Личный кабинет - сравнение ассортимента товаров

В личном кабинете также доступны и другие виды диаграмм и графиков с результатами анализа ассортимента товаров.

Линейчатая диаграмма

Представляет результаты сравнения ассортимента товаров в соответствии с классификатором товаров в количественном выражении. По оси абсцисс — количество товаров. По оси ординат — перечень магазинов конкурентов, а также клиентский перечень категорий классификатора товаров.

Фильтрация товарной выборки по:

  • категории товаров;
  • наличию товаров;
  • наличию скидки;
  • диапазону цен;
  • бренду.
Личный кабинет - сравнение ассортимента товаров

Пузырьковая диаграмма

Представляет результаты сравнения ассортимента товаров в разрезе сегмента цен в соответствии с классификатором товаров клиента. На оси абсцисс представлен перечень магазинов клиента и конкурентов. На оси ординат — диапазон цен и количество товаров в заданном сегменте цен.

Товарная выборка фильтруется по:

  • категории товаров;
  • наличию товаров в продаже;
  • наличию скидки;
  • диапазону цен;
  • бренду.
Личный кабинет - количественное сравнение ассортимента товаров в разрезе ценовых сегментов

Японские свечки

На графике представлены результаты сравнения ассортимента товаров в контексте минимальной, максимальной и средней стоимостей. На оси абсцисс представлен диапазон цен. На оси ординат — перечень магазинов конкурентов. Минимальная, максимальная и средняя стоимости товаров представлены на графике в виде свечек.

Фильтрации товарной выборки по:

  • категории товаров;
  • наличию товаров;
  • наличию скидки;
  • диапазону цен;
  • бренду.
Личный кабинет - сравнение ценового диапазона

Калькулятор рыночной стоимости товаров

Позволяет для каждого товара задать математическую формулу стоимости. Например: MIN(ALL) - 300, где ALL — массив ценовых предложений всех конкурентов, подключенных к мониторингу. В формуле можно использовать наименования конкурентов в качестве переменных и необходимый набор вычислительных операций, некоторые из них:

  • функции MIN, MAX, AVG;
  • сложение, вычитание, умножение, деление;
  • открывающая и закрывающая скобки.

Доступно групповое применение одной формулы к нескольким выбранным товарам. В колонке «Market Price» появляется текущая рыночная стоимость.

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

Личный кабинет - калькулятор рыночной стоимости

Отчеты и периодические выгрузки

В личном кабинете доступно формирование и выгрузка данных, представленных на диаграммах, в CSV-, XLSX-файлы. Сервис генерирует периодические выгрузки по завершении веб-парсинга и при возникновении различных событий. Периодические выгрузки отправляются на электронную почту сотрудников клиента. Сервис хранит все сформированные отчеты и периодические выгрузки, которые доступны в разделе «Отчеты».

Личный кабинет - периодические выгрузки