Product API от Fetchee: автоматический парсинг товаров интернет-магазинов
На старте проекта мы хотели как можно быстрее показать готовый продукт пользователям, поэтому старались упростить приложение всеми способами. Одним из вариантов был отказ от разработки собственного парсера интернет-магазинов и внедрение готового решения.
В целях сокращения объема повествования, упущу сравнение популярных приложений по извлечению данных с сайтов (если хотите увидеть это сравнение, оставьте свой голос в опросе в конце статьи). Достаточно будет сказать, что наиболее подходящим для нашей задачи оказался diffbot — крайне недешёвый сервис, популярный среди крупных компаний и стартапов с приличным финансированием. Его используют многие приложения для создания закладок, ведь качественный парсинг — это трудно.
Во-первых, решение нам было не по карману, а во-вторых, diffbot плохо работал с российскими интернет-магазинами. Пришлось придумывать свою технологию парсинга, которая должна уметь:
- Максимально автоматически определять основные параметры товара;
- Работать с любой валютой и языком;
- Учитывать географическое положение пользователей и особенности работы магазинов с этим регионом (язык, валюта и страна);
- Определять магазины с дискриминационным ценообразованием (версия операционной системы и город в пределах страны).
Нам удалось реализовать все описанные выше принципы. Система обучается на новых данных и умнеет на глазах. Чем больше запросов — тем точнее она становится. Наше желание сделать выборку более разнообразной и стало одной из причин предоставления доступа к Product API сторонним разработчикам, т.к. темпы появления новых данных со стороны пользователей замедлились — 90% покупают в одних и тех же интернет-магазинах.
Итак, встречайте Product API от Fetchee. С его помощью вы сможете, указав любой URL товара в интернет-магазине, получить основные данные о вещи, включая название, изображение, цену и валюту. В случае с нашим API, вам не придется настраивать парсер под каждый сайт, система самостоятельно анализирует страницу и определяет нужные данные.
Например, вот результаты парсинга велосипеда с 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 и потом ее парсите?