Product API от Fetchee: автоматический парсинг товаров интернет-магазинов

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

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

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

Во-первых, решение нам было не по карману, а во-вторых, diffbot плохо работал с российскими интернет-магазинами. Пришлось придумывать свою технологию парсинга, которая должна уметь:

  • Максимально автоматически определять основные параметры товара;
  • Работать с любой валютой и языком;
  • Учитывать географическое положение пользователей и особенности работы магазинов с этим регионом (язык, валюта и страна);
  • Определять магазины с дискриминационным ценообразованием (версия операционной системы и город в пределах страны).

Нам удалось реализовать все описанные выше принципы. Система обучается на новых данных и умнеет на глазах. Чем больше запросов — тем точнее она становится. Наше желание сделать выборку более разнообразной и стало одной из причин предоставления доступа к Product API сторонним разработчикам, т.к. темпы появления новых данных со стороны пользователей замедлились — 90% покупают в одних и тех же интернет-магазинах.

Итак, встречайте Product API от Fetchee. С его помощью вы сможете, указав любой URL товара в интернет-магазине, получить основные данные о вещи, включая название, изображение, цену и валюту. В случае с нашим API, вам не придется настраивать парсер под каждый сайт, система самостоятельно анализирует страницу и определяет нужные данные.

image

Например, вот результаты парсинга велосипеда с Avito.

{
   "id":"58234b6cfd920b507bfd6b1f",
   "url":"https://www.avito.ru/sankt-peterburg/velosipedy/velosiped_author_basic_rama_19_i_21_835103333",
   "title":"Велосипед Author Basic, рама 19\" и 21\"",
   "price":14900,
   "currency":"RUB",
   "img_url":"https://fetch.ee/assets/item-images/5823/4b78475d39467b4b25eb.jpg",
   "created_at":"2016-11-09T16:14:36.542Z",
   "last_track_at":"2016-11-09T16:14:48.061Z"
}

Модной сумки с Wildberries.
{
   "id":"5824212c65ef60477b38b890",
   "url":"https://www.wildberries.ru/catalog/3095060/detail.aspx?targetUrl=GP",
   "title":"Сумка, GUESS",
   "price":13560,
   "currency":"RUB",
   "img_url":"https://fetch.ee/assets/item-images/5824/2144475d39467b4b26de.jpg",
   "created_at":"2016-11-10T07:26:36.368Z",
   "last_track_at":"2016-11-10T07:27:00.544Z"
}

Или внедорожника с автомобильного сайта.
{
   "id":"5824219b65ef60477b38b8be",
   "url":"https://auto.ru/cars/new/sale/bmw/x6_m/1044423007-94d1a/",
   "title":"Продажа BMW X6 M II (F86) в Москве",
   "price":8099000,
   "currency":"RUB",
   "img_url":"https://fetch.ee/assets/item-images/5824/21ad475d39467b4b26df.jpg",
   "created_at":"2016-11-10T07:28:27.038Z",
   "last_track_at":"2016-11-10T07:28:45.516Z"
}

На любой странице, где есть цена, изображение и название товара — Product API найдёт эти данные и вернёт их вам в JSON для дальнейшей обработки.

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

Нам очень интересно увидеть как ваши идеи воплощаются в жизнь с помощью Product API.

Комментарии (9)

  • 11 ноября 2016 в 11:18

    0

    Цитата с https://fetch.ee/ru/developers/
    Product API извлекает данные о товарах из любого интернет-магазина в любой стране.
    Получает название, изображение, цену, валюту и другие характеристики.
    Поддерживает любую валюту и язык интернет-магазина, а так же географическое положение.

    По факту имеем
    url: http://m.finn.no/car/used/ad.html? finnkode=15254566

    Вот что мы нашли.

    {
    «id»:»58257ccb65ef60477b39338f»,
    «url»: «http://m.finn.no/car/used/ad.html? finnkode=15254566»,
    «title»: «Mercedes-Benz C-Klasse»,
    «img_url»: «https://images.finncdn.no/dynamic/1280w/6/152/545/66_287309295.jpg»,
    «created_at»:»2016–11–11T08:09:47.474Z»,
    «last_track_at»:»2016–11–11T08:09:57.440Z»,
    «unprocessed»: true
    }

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

    • 11 ноября 2016 в 11:28

      0

      ID не с потолка, а, судя по его виду, из MongoDB в которой хранятся результаты парсинга. Посмотрите на примеры в статье, там тоже нет «локальных» ID. Я вообще сомневаюсь в возможности «вытащить» «локальный» ID с помощью «универсального» парсера.


      Да и по поводу цены сложно товарищей винить — »89 900,-» это очень необычный формат обозначения валюты.

      • 11 ноября 2016 в 11:31

        0

        Про ID из MongoDB Вы правы. В формате, кстати, нет проблем (хотя если глянуть на HTML, дизайнерам можно руки оторвать). А вот валюта подвела для этой страницы.
    • 11 ноября 2016 в 11:30

      0

      Спасибо, что решили попробовать. ID в ответе — это идентификатор запроса, к товару он не имеет отношения. Система вернула unprocessed: true, что говорит о невозможности получит все данные. Валюту для этой страницы автоматически определить будет сложно, т.к. нет знака валюты у цены. Именно для таких диковинных сайтов и затеяли публичный API. Цену научимся обрабатывать и дам Вам знать.
  • 11 ноября 2016 в 11:27

    0

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

    Попробовал несколько ссылок указать, тот же ссылка. В начале несколько минут было «Ваш запрос обрабатывается…», а потом что превышено время ожидания.
    • 11 ноября 2016 в 11:28

      0

      Со второй попытки все же нашлось, но без цены, описания и т.п.:
      {
          "id": "5825801c65ef60477b393545",
          "url": "http://www.tehnosila.ru/catalog/tovary_dlja_sporta/velosipedy_i_aksessuary/velosipedy/-/284900",
          "created_at": "2016-11-11T08:23:56.599Z",
          "last_track_at": "2016-11-11T08:28:20.869Z",
          "unprocessed": true
      }
      
      • 11 ноября 2016 в 11:35

        0

        Хаброэффект, не иначе. Всё-таки API в бете, может и призадуматься. Попробуйте ещё раз, цена Техносиле теперь в норме.
        • 11 ноября 2016 в 11:41 (комментарий был изменён)

          0

          del
  • 11 ноября 2016 в 11:46

    0

    А с сайтами, которые динамически собирают страницу (spa и т.п.), каким образом вы собираете информацию (если не секрет)? На своей стороне полностью рендерите html и потом ее парсите?

© Habrahabr.ru