База прайс-листов и обработка данных из открытых источников

База прайс-листов и обработка данных из открытых источников

Раскрываем подробности о том, как функционирует и пополняется хранилище информации о товарах, без которого невозможна работа комплексной системы управления закупками.

Наша практика будет интересна, если вы:

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

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

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

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

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

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

Как устроена база прайс-листов

Основа сервиса — система управления базами данных Microsoft SQL Server, заточенная под работу с другими элементами комплекса управления закупками и дополненная функциями, с которыми хранилище прайс-листов проще пополнять.

Чтобы избавить сотрудников отделов закупок компаний от рутинных задач, мы создали «точку входа» для поставщиков и производителей. Они могут зарегистрироваться в личном кабинете, связанном с базой данных, и загрузить прайсы непосредственно в хранилище. Если обычно предложения поступают на электронную почту и теряются в спаме, то с таким сервисом они сразу доступны для обработки и анализа.

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

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

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

Для клиентов, заинтересованных в поиске товаров в интернет-магазинах, мы разработали третий способ пополнения базы прайс-листов — программу-парсер товарных каталогов на базе .Net Framework и библиотеки AngleSharp.

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

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

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

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

База прайс-листов с точки зрения заказчика

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

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

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

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

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