{"id":14276,"url":"\/distributions\/14276\/click?bit=1&hash=721b78297d313f451e61a17537482715c74771bae8c8ce438ed30c5ac3bb4196","title":"\u0418\u043d\u0432\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u0442\u043e\u0432\u0430\u0440 \u0438\u043b\u0438 \u0443\u0441\u043b\u0443\u0433\u0443 \u0431\u0435\u0437 \u0431\u0438\u0440\u0436\u0438","buttonText":"","imageUuid":""}

Pricim.ru - сервис мониторинга цен в интернет-магазинах

О том, как, почему и для чего был создан очередной парсер разработчиком-одиночкой.

На рынке уже представлено большое количество подобных сервисов, которые работают годами и судя по всему весьма успешно. Если вдруг кто не знает сути, опишу кратко: с помощью подобных сервисов можно свести в одну табличку (или получить их через API) данные сотен товаров сотен интернет-магазинов и таким образом, например, вычислить наиболее привлекательную цену для покупателя своего магазина или найти тех, кто явно демпингует. Цели использования полученной информации могут быть разными.

Я работаю фуллстек разработчиком, то есть веду полный цикл разработки и помимо создания проектов по ТЗ клиентов, создаю проекты и по собственным соображениям. Быть в роли разработчика-предпринимателя мне нравится больше, чем просто разработчика за зарплату: код, грубо говоря, пишется один и тот же, а вот путь дальнейшего развития и принимаемые решения зависят только от самого себя. Да и финансовая составляющая в перспективе куда интереснее (одним из таких проектов является Rubitime.ru о котором я писал на VC три года назад: Стартап «в одного» или сложности ведения бизнеса в сети - кстати, если интересно узнать о состоянии нынешних дел, пишите в комментариях, если будет спрос, подготовлю отдельный материал). Но вернемся к основной теме и пройдемся по пунктам простым, насколько это возможно, языком.

Немного о технологиях

Способов парсинга/скрапинга (извлечения данных) с сайтов существует несколько, я кратко заверну их в три:

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

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

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

3. Браузер. Да, обычный браузер, через который вы сейчас читаете эту статью. Что может быть гениальнее, чем эмулировать человека при просмотре страниц сайта? В основе Pricim.ru лежит технология Puppeteer: «Puppeteer - это библиотека Node.js, которая позволяет автоматизировать процессы в Chromium браузере при помощи API высокого уровня, через Chrome DevTools Protocol». Переводя на русский язык, с помощью определенных команд языка программирования можно управлять браузером так, как это делал бы обычный человек. Плюсы очевидны: страницы выглядят так, как их в действительности видит человек (отрабатывает JavaScript, подгружаются изображения, стили страниц и так далее), а определить, бот это или реальный человек значительно сложнее, что позволяет выполнять практически любые действия (но в нашем случае - это только получение цен на товары). Конечно, есть и минусы: скорость работы значительно медленнее использования того же cURL или API, нагрузка на сервер выше, трафика тратится больше. Но при всем при этом, результат стабильнее, а метод получения информации является универсальным, что в итоге и было использовано для работы проекта.

Как работает для пользователей

1. Товар/товары импортируются в систему: через веб-интерфейс или через XLSX (Excel) файл:

2. Следующим этапом является сопоставление товаров. Конечно, в идеале нужно данный этап автоматизировать до уровня «указал ссылку на сайт конкурента - система сама нашла товар и получила цену», но этот момент переносится на будущее, так как требует большого объема работ, на текущем этапе MVP сопоставление товаров происходит вручную. Для импортированного товара нужно указать два параметра: ссылку до карточки с товаром на сайте конкурента и XPath (XPath - это своего рода наименование технического расположения цены на странице, подробная инструкция о том, как указать цену есть здесь https://pricim.ru/xpath):

3. Следующим шагом идет настройки сбора цен: формула для репрайсинга (расчет для рекомендованной цены) и частота сбора данных:

4. Просматриваем полученные результаты, экспортируем в Excel. В будущем, появится и API для взаимодействия:

По каждому из товаров можно смотреть динамику изменения его цены:

Что дальше

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

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

Спасибо за внимание! Если появятся вопросы, с удовольствие отвечу на них в комментариях.

0
5 комментариев
Sergej Stroh

А почему бы не зачитывать информацию со rich snippets, они есть думаю у 90% всех сайтов. Было бы не проще и быстрее?

Ответить
Развернуть ветку
Артём Зарубин
Автор

Они есть далеко не у всех, не у всех там присутствует цена, цена так же может отображаться устаревшей, а переиндексация страниц может происходить раз в неделю или месяц, а обновление цен нужно каждый день. Есть сервисы, которые берут цены из рекламы, выводимой в поисковиках Яндекса и Гугла, но это не всем подойдет (по тем же причинам + нужного товара банально может не быть в рекламных объявлениях).

Ответить
Развернуть ветку
Game Topia

Буквально только сегодня попалась на глаза новость, что через несколько дней введут уголовное наказание за парсинг сайтов. Точнее сказать, тамбыло написано, что из-за нового закона за парсинг будут наказывать уголовно. То есть, парсинг вроде как подползает под какой-то новый закон. Вот если это правда!

Ответить
Развернуть ветку
Артём Зарубин
Автор

Цены, заголовок, название категорий - не является объектом авторского права, общедоступно, а следовательно ни о каком запрете в данном случае речи быть не может ) Это вот если например собирать статьи и публиковать на своем сайте - это да, автоматизированное воровство.

Оставлю здесь ссылку с хорошим описанием, на юридической основе (кстати тоже сервис мониторинга цен, привет владельцу Максиму Кульгину): https://xmldatafeed.com/zakon/

Ответить
Развернуть ветку
Артём Зарубин
Автор

Нашел видимо о какой статье речь: https://vc.ru/legal/279220-cherez-mesyac-parsing-saytov-v-rossii-budet-prakticheski-zapreshchen-polnyy-obzor-spora-vk-v-dabl-i-ego-posledstviya Там сбор персональных данных, что в целом уже является личной информацией и за такой действительно можно получить по шапке. Но это не наш случай.

Ответить
Развернуть ветку
2 комментария
Раскрывать всегда