Показать Телефон

Opensource: Vessel — Ruby фреймворк для краулинга веб-страниц

Мы в Evrone создали на Ruby высокоуровневый фреймворк для сканирования веб-сайтов. С его помощью можно парсить данные с веб-сайтов для последующего анализа, мониторинга или архивирования.

В статье про проект Machinio рассказываем, как автоматически собирать информацию с разных сайтов и систематизировать её на едином маркетплейсе.

На сайте Evrone расширенная статья о фреймворке Vessel.

Задача.

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

Evrone отвечал за backend, ядро стартапа. В наши задачи входило объединение изначальных собственных разработок Machinio с нашей экспертизой.

Как собрать и обработать листинги с тысячи сайтов?

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

Там, где не справляются собственные кроулеры Machinio, помогает Ferrum, open-source решение, созданное при поддержке Evrone. Это позволило нам собрать информацию для агрегатора, например, с сайтов, использующих React или Vue.

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

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

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

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

Vessel — это быстрый высокоуровневый фреймворк с открытым исходным кодом для сканирования и получения данных с веб-страниц, созданный на основе Ferrum — драйвера с минимальным количеством зависимостей, написанного на чистом Ruby, для запуска headless Google Chrome.

Репозиторий проекта на Github.

Читайте на сайте в русской или английской версии:

https://evrone.com/vessel-framework

https://evrone.com/ferrum-ruby-chrome-driver

https://evrone.com/ruby