Комментарии 43
Цитата с https://fetch.ee/ru/developers/
По факту имеем
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 взятый с потолка.
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 взятый с потолка.
ID не с потолка, а, судя по его виду, из MongoDB в которой хранятся результаты парсинга. Посмотрите на примеры в статье, там тоже нет "локальных" ID. Я вообще сомневаюсь в возможности "вытащить" "локальный" ID с помощью "универсального" парсера.
Да и по поводу цены сложно товарищей винить — "89 900,-" это очень необычный формат обозначения валюты.
Спасибо, что решили попробовать. ID в ответе — это идентификатор запроса, к товару он не имеет отношения. Система вернула unprocessed: true, что говорит о невозможности получит все данные. Валюту для этой страницы автоматически определить будет сложно, т.к. нет знака валюты у цены. Именно для таких диковинных сайтов и затеяли публичный API. Цену научимся обрабатывать и дам Вам знать.
На мой взгляд, было бы честнее предоставить список магазинов, где API работает, вместо утверждения о «любых».
Однако, если расчет был на то, что множесто людей ринутся проверять, действительно ли любых, то решение верное =)
Вопрос из любопытства — обучение распознаванию происходит в автоматическом, полуавтоматическом или ручном режиме?
Однако, если расчет был на то, что множесто людей ринутся проверять, действительно ли любых, то решение верное =)
Цену научимся обрабатывать и дам Вам знать.
Вопрос из любопытства — обучение распознаванию происходит в автоматическом, полуавтоматическом или ручном режиме?
У нас есть автомат по распознаванию паттернов. Он может давать сбои, поэтому ему нужно периодически подкидывать новы сайты. Чем их больше, тем он надёжней срабатывает. Процесс обучения простой: получили автоматический результат, проверили на корректность, если есть ошибка, добавили правило, прогнали тесты не рушит ли правило предыдущие верные срабатывания.
API на самом деле автоматически работает со всеми магазинами, которыми пользуется 95% покупателей в интернете. Но верстальщики самые находчивые люди, иногда пользователи добавляют такие сайты, где в коде идёт борьба бессмысленности с глупостью. В этом случае мы вытираем скупую слезу и делаем ручную настройку. Интересно, что товары из этого магазина интересуют, как правило, только одного пользователя.
Видимо, для полной автоматизации, нужно будет реализовать систему машинного зрения и определения тематических блоков.
API на самом деле автоматически работает со всеми магазинами, которыми пользуется 95% покупателей в интернете. Но верстальщики самые находчивые люди, иногда пользователи добавляют такие сайты, где в коде идёт борьба бессмысленности с глупостью. В этом случае мы вытираем скупую слезу и делаем ручную настройку. Интересно, что товары из этого магазина интересуют, как правило, только одного пользователя.
Видимо, для полной автоматизации, нужно будет реализовать систему машинного зрения и определения тематических блоков.
Грандиозная работа! Я в восхищении от методов.
Прошу простить любопытство (это неуемная тяга к тестированию всего и вся).
На примере, указанном в одном из комментариев ниже
Насколько я понимаю, парсер не воспринял это как ошибку и, следовательно, не будет самообучаться на данном примере, верно?
Прошу простить любопытство (это неуемная тяга к тестированию всего и вся).
На примере, указанном в одном из комментариев ниже
«title»: «370 руб. нет в наличии»,
Насколько я понимаю, парсер не воспринял это как ошибку и, следовательно, не будет самообучаться на данном примере, верно?
Воспринял и обучился. Вот этот URL уже правильный http://dietjust.ru/products/14061117. API закешировало ошибочный ответ. Новые запросы отрабатывают правильно.
P.S. Я ценю Ваше любопытство.
P.S. Я ценю Ваше любопытство.
Ниже сказано
Отсюда я сделал выводы, что автоматический режим не сработал, что было бы вполне логично, т.к. парсер извлек эти (некорректные) данные как title, что подразумевает, что с его точки зрения это title и есть. Т.е. причин для парсера искать другой title (срабатывания некого триггера) я не вижу.
Или он подвергает сомнению все собранные данные?
Подкрутили алгоритм
Отсюда я сделал выводы, что автоматический режим не сработал, что было бы вполне логично, т.к. парсер извлек эти (некорректные) данные как title, что подразумевает, что с его точки зрения это title и есть. Т.е. причин для парсера искать другой title (срабатывания некого триггера) я не вижу.
Или он подвергает сомнению все собранные данные?
Возможно, я не правильно выразился где-то по тексту. Парсер учится, а указывать на его ошибки — задача человека. Сейчас реализован метод кнута, когда мы не даём систему права на вторую ошибку, принудительно заставляя обрабатывать данные правильно. В идеале, конечно, реализовать полноценную систему машинного обучения, когда от человека будет требоваться только проверка результатов и команды: Верно / Не верно, иди ещё подумай.
Product API извлекает данные о товарах из любого интернет-магазина в любой стране.
Получает название, изображение, цену, валюту и другие характеристики.
Поддерживает любую валюту и язык интернет-магазина, а так же географическое положение.
Попробовал несколько ссылок указать, тот же ссылка. В начале несколько минут было «Ваш запрос обрабатывается..», а потом что превышено время ожидания.
Со второй попытки все же нашлось, но без цены, описания и т.п.:
{
"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
}
А с сайтами, которые динамически собирают страницу (spa и т.п.), каким образом вы собираете информацию (если не секрет)? На своей стороне полностью рендерите html и потом ее парсите?
Я думаю, что таких сайтов-продавцов меньшинство, т.к. большинство продающих сайтов заинтересованы, чтобы в поисковики попадало как можно больше страниц товаров, и spa для магазина — очень неудачное решение
На западе их очень много. Значение SEO сильно преувеличено для магазинов. Т.е. запросы на конкретную модель, которая через 4-5 месяцев уже уйдёт из продажи, скорее всего будут перехвачены агрегаторами типа Яндекс.Маркет. Магазины сосредотачиваются на привлечении трафика на посадочные страницы. Ну а сделал пререндер и закешировать посадочную на SPA вообще не проблема.
По необходимости полностью рендрим страницу вместе с JS. По понятным причинам время ожидания обработки для SPA сайтов немного выше.
Есть интернет магазины, где важна авторизация, что бы видеть цену со скидкой (присвоенной пользователю). У вас есть/в планах решение?
странный парсинг.
url:
http://dietjust.ru/products/23748692
Вот что мы нашли.
По какому принципу в данном случае он выбирал title для меня осталось загадкой.
url:
http://dietjust.ru/products/23748692
Вот что мы нашли.
{
"id": "58258e53b25795f760078d1b",
"url": "http://dietjust.ru/products/23748692",
"title": "370 руб. нет в наличии",
"price": 370,
"currency": "RUB",
"img_url": "http://i.siteapi.org/G0mzV92ignFZHjq4iNhLNTfk0DE=/113x0:602x377/fit-in/156x120/filters:fill(transparent):format(png)/ea331f79b074863.ru.s.siteapi.org/img/e3d2f43973a2f83ec36641997f935d5f1ae972bc.jpg",
"created_at": "2016-11-11T09:24:35.586Z",
"last_track_at": "2016-11-11T09:24:47.417Z"
}
По какому принципу в данном случае он выбирал title для меня осталось загадкой.
url:
https://www.computeruniverse.ru/products/90659981/palit-geforce-gtx1060-dual.asp
Как я понял, с двойной валютой парсер не справился:
https://www.computeruniverse.ru/products/90659981/palit-geforce-gtx1060-dual.asp
Как я понял, с двойной валютой парсер не справился:
{
"id": "58259b6740b895da69e0a2d6",
"url": "https://www.computeruniverse.ru/products/90659981/palit-geforce-gtx1060-dual.asp",
"title": "Palit GeForce GTX1060 Dual 6.0 GB High End видеокарта",
"price": 234.37,
"currency": "RUB",
"img_url": "https://fetch.ee/assets/item-images/5825/9b9322ae47d46976383b.jpg",
"created_at": "2016-11-11T10:20:23.492Z",
"last_track_at": "2016-11-11T10:21:07.712Z"
}
Имеется ли в планах апи колл, которому можно передать ошибку парсинга, например, url, который не распарсил.
Чтобы инфу не через хабр сообщать, а апишкой?
Чтобы инфу не через хабр сообщать, а апишкой?
У Стима блокировка по возрасту. Можно обойти, но проще с ними по API интегрироваться, если кому-то понадобится следить за ценами на игры.
Можете описать ситуацию, когда понадобится получить данные и следить за ценой на бесплатный товар?
Можете описать ситуацию, когда понадобится получить данные и следить за ценой на бесплатный товар?
Я так понял — данный сервис нужен для автоматического отслеживания цены/наличия на отдельный товар.
Извлечение списка товаров со страницы каталоге не планируется?
Извлечение списка товаров со страницы каталоге не планируется?
Совершенно верно, мы используем технологию для слежения за ценами. Но кто-то может встроить Product API в свой сервис закладок, например. Или любое другое приложение, где пользователи хотят видеть базовую информацию о товаре. Например, модуль предпросмотра ссылок на интернет магазины для форумов или блогов.
Если коллеги-разработчики скажут, что нужна функция по URL списка товаров пройтись и обработать все ссылки на вещи, да ещё принять в учёт пагинацию — сделаем. Главное, чтоб были кейсы, которые упростят жизнь и окажутся востребованными.
Если коллеги-разработчики скажут, что нужна функция по URL списка товаров пройтись и обработать все ссылки на вещи, да ещё принять в учёт пагинацию — сделаем. Главное, чтоб были кейсы, которые упростят жизнь и окажутся востребованными.
Ваше API хотелось бы видеть для использования в приложениях, для создания мобильных клиентов сайтов, не имеющих API.
Т.е. не только для одного выбранного товара, а для получения каталога (всех данных товара со страницы) с сайта.
Т.е. не только для одного выбранного товара, а для получения каталога (всех данных товара со страницы) с сайта.
Спасибо за идею! В теории можно так использовать API, но где сейчас движок магазина, который не поддерживает мобильные шаблоны? У нас в приоритете сбор данных о товаре, а не краулинг. Т.е. в принципе, уже сейчас можно использовать Product API совместно с Вашим краулером.
Пожалуйста, жду доп. скидку, когда будет API готово :)
Дело не в краулинге (я верно понял — хождение по страницам сайта ?) — а в получении данных о всех товарах с открытой страницы. Хотя по одному товару — согласен, что и сейчас будет работать.
Дело не в краулинге (я верно понял — хождение по страницам сайта ?) — а в получении данных о всех товарах с открытой страницы. Хотя по одному товару — согласен, что и сейчас будет работать.
Цена не пришла, описание тоже
http://www.superdrug.com/Bourjois/Bourjois-Healthy-Mix-Foundation-Light-Vanilla-51/p/626461
{
«id»: «5828bfa540b895da69e1e038»,
«url»: «http://www.superdrug.com/Bourjois/Bourjois-Healthy-Mix-Foundation-Light-Vanilla-51/p/626461»,
«title»: «Bourjois Healthy Mix Foundation Light Vanilla 51»,
«img_url»: «http://www.superdrug.com/medias/custom-content/microsites/starbuys/popup/2016/wk46/starbuys_wk46.jpg»,
«created_at»: «2016-11-13T19:31:49.615Z»,
«last_track_at»: «2016-11-13T19:31:59.686Z»,
«unprocessed»: true
}
http://www.superdrug.com/Bourjois/Bourjois-Healthy-Mix-Foundation-Light-Vanilla-51/p/626461
{
«id»: «5828bfa540b895da69e1e038»,
«url»: «http://www.superdrug.com/Bourjois/Bourjois-Healthy-Mix-Foundation-Light-Vanilla-51/p/626461»,
«title»: «Bourjois Healthy Mix Foundation Light Vanilla 51»,
«img_url»: «http://www.superdrug.com/medias/custom-content/microsites/starbuys/popup/2016/wk46/starbuys_wk46.jpg»,
«created_at»: «2016-11-13T19:31:49.615Z»,
«last_track_at»: «2016-11-13T19:31:59.686Z»,
«unprocessed»: true
}
Это же хабр. Хочется немного и технических подробностей. На каком стеке работает, каких сил стоила разработка, какой размер команды. Потому как крутость решения можно оченить только по сумму всех этих показателей.
На чём делали? Не (Томита-Парсер Яндекса) случайно?
Мы использовали свои технологии от и до. А за наводку на Томита-Парсер — спасибо! Хотя, он сущности находит в тексте, немного не то, чем мы занимаемся. Кстати, похожая технология есть у ABBYY.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Product API от Fetchee: автоматический парсинг товаров интернет-магазинов