Василиса▶ Я жду вашего обращения. Что Вы хотите узнать?
Логотип
Уникальное обозначение: задача просмотра средней цена на Товары ( страница )
Обозначение: мониторинг цен на Товары
Сущность ⇔ страница
текст:

Задача просмотра средней цена на товары

или

Мониторинг цен на товары

Дневник реализации.
Начало: 22.07.2016
ЗАДАНИЕ:

Получилось такое задание (пока решили ограничиться одним).
Условно назовем мониторинг цен.
Условия:
Варианты поиска источников:
1)      Вариант №1 (наиболее приемлемый вариант):
«Василиса» при получении запроса сама ищет не менее 5-ти каталогов продукции и выбирает информацию из них.
2)      Вариант №2:
Подключение к заранее определенным источникам информации:
Перечень источников информации:
https://market.yandex.ru/
http://zakupki.gov.ru/epz/contractfz223/quicksearch/search.html (цены на товары, работы и услуги из Реестра Договоров)
https://www.auchan.ru/
https://www.ulmart.ru/
http://www.ozon.ru/

При формировании поискового запроса пользователь должен указать:
                Непосредственно наименование товара;
                Не менее 2-х характеристик товара (например, Телевизор 42“ плазма HDMI).
При формировании ответа «Василиса» должна:
                Вывести информацию по запрашиваемому товару, а именно:
                               Источники приобретения с ценами на товар, если источников много в том числе среднюю цену на товар;
                               Информацию по товару –характеристики, производитель товара, страна производителя;
                               Период размещения информации ( если есть);
                               Срок действия предложения ( если есть);
                               Оптовые цены производителя (опционально);
                               Прогноз колебания цены на период времени (опционально).

Процесс решения

1.Анализ.

Для реализации первого варианта задания понадобиться ресурс постоянно сканирующий интенет и индексирующий подходящие к цели мониторинга сайты. Кроме этого необходимо разработать автоматический семантический анализатор. Это крайне трудоёмкоя задача. В результате объединения получиться система напоминающая Яндекс или Гугл, а это ещё более трудоёмкоя задача (хотя и выполнимая).

Насколько я правильно понимаю цель поставленной задачи сделать макет системы позволяющей мониторить цены и показать достоинства технологии Василисы.

Для решения выбираем второй вариант постановки задачи.

Как это можно сделать?

I ЭТАП
Понятно, что для поиска цены на товар необходимо, чтобы Василиса знала сам товар.Другими словами надо занести в ВИПРОС сущности отображающие товар.
Порядок решения этой подзадачи следующий:
1. Для каждого указанного ресурса готовим шаблон чтения информации.
        На этом шаге используется готовые функции настраиваемые на конкретный ресурс.
        В результате их работы создается файл с набором комъектов отображающих 
         товар. Этот файл готов к загрузке в ВИПРОС.
         примерный вид описания товара:
         {+(>область<=>телевизор<)(>марка<=>panasinic<)(>диагональ<=>40"<)(>формат<=>1080p Full HD, 1920x1080<) 
           (>свойство<=>TX-40CSR520<)
           (>свойство<=>ЖК-телевизор<)
           (>свойство<=>Smart TV<)
           (>свойство<=>прием цифрового телевидения (DVB-T2)<)
           (>свойство<=>подключение к Wi-Fi<)
           (>сайт<=>[>https://market.yandex.ru/product/12507105/spec?hid=90639&track=char<]<)
           (>сайт<=>[>https://market.yandex.ru/<]<) +}
2. читаем информацию о товарах с каждого ресурса и преобразовываем её в комъекты для ввода в ВИПРОС по правилам ВИПРОС
3. заводим информацию в ВИПРОС
4. синхронизируем отображения для одних и тех-же товаров с разных ресурсов
После синхронизации в ВИПРОСе появятся сущности отображающие каждый товар и связь этого товара с нужными 
страницами в интернете где храниться текущая цена (и не только с нужнами страницами,
 но и с идентификаторами тегов содержащих эту информацию). 

<Вставка 21.07.2016> После частичной реализации и анализа появилась потребность в организации следующей схемы:

</Вставка 21.07.2016>
 
II ЭТАП
На следующем шаге пишем функцию способна обрабатывать класс отобранных сущностей в нужном нам виде.
Примерно это будет выглядеть так:
Обращение: 
{+(>действие<=>показать<)(>клиент<=>цена<)(>Класс<=>[>(>Товары<=>телевизоры<)(>Марка<=>panasonic<)(>диагональ<=>42"<)<]<)
(>сайт<=>яндекс<)(>сайт<=>закупки<)(>сайт<=>озон<)+}
Атриз САЙТ может бать задан в виде (>сайт<=>все<) 
Обработка:
1. Выбирается указанный класс сущностей с отображением товара (либо с помощью форобра либо с использованием динамической классификации)
2. для каждого товара определяется список сайтов на которых есть страницы с текущими ценами на этот товар
3. для каждого элемента списка составляется запрос и читается страница с сайта
4. страница разбирается и выбирается нужные теги с информацией о цене
5. формируется вывод

<Вставка 25.07.2016>
Предложенный способ предполагает, что для каждого товара будет определён список ресурсов, где можно посмотреть предложение.
В этом подходе есть несколько уязвимых мест:
- источник информации сменил формат вывода;
- источник информации исчез;
- каждый раз при обращении пользователя придется делать обрабутку массы чужих контентов (это долго).

Выход из этой ситуации можно предложить следующий:
- организуем дерево для хранения описаний товаров, текущей информации по ценам и фото
  его структура - стандартная для pibase 
           t/ - (t|i) - (0|1|2|3|4|5|6|7|8,9) - (0|1|2|3|4|5|6|7|8,9) - (0|1|2|3|4|5|6|7|8,9)
  файлы с описанием товаров храняться с расширением .html с ценами .prc в ветке t/t/*/*/* 
  файлы с фото товаров храняться в ветке t/i/*/*/* 
- обработку текущей цены организовать как постоянный процесс сканирования инет с записью текущих цен и продавцов в 
  соответствующий товару файл с расширением .prc   в виде комъектов для каждого предложения. 
  образец комъекта:
    {+(>область<=>предложение товара<)(>Продавец<=>ашан<)(>Дата<=>21.07.2016<)(>цена<=>39200.00<)+}
- расширяем функцию  стандартного вывода комъекта выдачей в специальном формате файла *.prc в удобном формате.
 
</Вставка 25.07.2016>

РЕАЛИЗАЦИЯ найденного решения 
I ЭТАП
Исследование ресурсов:
=====================================================25.06.2016
Ресурс https://market.yandex.ru/    (ЯНДЕКС)

База данных товаров видна по адресу  https://market.yandex.ru/product
далее следует 8 значный номер (скорее всего внутренний идентификатор для их системы)
поэтому чтение страниц сделаем от 00000000 - 99999999 если страница пустая пропускаем если 
есть товар обрабатываем страницу
/12507105
  это расширение для выбора конкретного продукта
  тег 
  <div class="layout layout layout_type_maya">описание товара </div>
запрос на вывод только одного описания выглядит так:

{+(>сайт<=>[>market.yandex.ru/product/12507105<]<)(>И<=>[>{+(>тег<=>[>
<]<)+}<]<)+} {+(>сайт<=>[>market.yandex.ru/product/12507105<]<)(>И<=>[>{+(>тег<=>[><div class="layout layout layout_type_maya"></div><]<)+}<]<)+} /spec?hid=*****&track=char это расширение для полного списка характеристик ***** - какой-то идентификатор товара тег <div class="layout__col layout__col_size_p75 product-spec-wrap"></div> исключаем тег <div class="product-spec-hint i-bem"></div> {+(>сайт<=>[>market.yandex.ru/product/12507105/spec?hid=90639&track=char<]<)(>И<=>[>{+(>тег<=>[>
<]<)+}<]<)(>НЕТ<=>[>{+(>тег<=>[>
<]<)+}<]<)+} пример обращения за полным набором характеристик {+(>сайт<=>[>market.yandex.ru/product/12507105/spec?hid=90639&track=char<]<)(>И<=>[>{+(>тег<=>[><div class="layout__col layout__col_size_p75 product-spec-wrap"></div><]<)+}<]<)(>НЕТ<=>[>{+(>тег<=>[><div class="product-spec-hint i-bem"></div><]<)+}<]<)+} /offers?hid=*****&grhow=shop&deliveryincluded=1&how=aprice&page=1 это расширение для следующей страницы выдачи множества предложений сортированных по цене тег market.yandex.ru/product/12507105/offers?hid=90639&grhow=shop&deliveryincluded=1&how=aprice&page=1 {+(>сайт<=>[>market.yandex.ru/product/12507105/offers?hid=90639&grhow=shop&deliveryincluded=1&how=aprice&page=1<]<)(>И<=>[>{+(>тег<=>[>
<]<)+}<]<)+} {+(>сайт<=>[>market.yandex.ru/product/12507105/offers?hid=90639&grhow=shop&deliveryincluded=1&how=aprice&page=1<]<)(>И<=>[>{+(>тег<=>[><div></div><]<)+}<]<)+} Вывод: считать базу можно и целесообразно. проблем с картинками нет<Вставка 21.07.2016> После частичной реализации и анализа появилась потребность в организации следующей схемы: - организуем дерево для хранения описаний товаров, текущей информации по ценам и фото его структура - стандартная для pibase t/ - (t|i) - (0|1|2|3|4|5|6|7|8,9) - (0|1|2|3|4|5|6|7|8,9) - (0|1|2|3|4|5|6|7|8,9) файлы с описанием товаров храняться с расширением .html с ценами .prc в ветке t/t/*/*/* файлы с фото товаров храняться в ветке t/i/*/*/* - обработку текущей цены организовать как постоянный процесс сканирования инет с записью текущих цен и продавцов в соответствующий товару файл с расширением .prc в виде комъектов для каждого предложения. образец комъекта: {+(>область<=>предложение товара<)(>Продавец<=>ашан<)(>Дата<=>21.07.2016<)(>цена<=>39200.00<)+} - расширяем функцию стандартного вывода комъекта выдачей в специальном формате файла *.prc в удобном формате. </Вставка 21.07.2016> ============================================================== Ресурс http://zakupki.gov.ru (Закупки) {+(>сайт<=>[>zakupki.gov.ru<]<)(>И<=>[>{+(>тег<=>[>
<]<)+}<]<)+} {+(>сайт<=>[>zakupki.gov.ru<]<)(>И<=>[>{+(>тег<=>[>
<]<)+}<]<)+} Вывод: Не увидел возможности считать базу с товарами ==============================================================26.06.2016 Ресурс https://www.auchan.ru/ (АШАН) База данных товаров видна по адресу https://www.auchan.ru/pokupki/catalog/product/view/id/ далее следует 5 значный номер (скорее всего внутренний идентификатор для их системы) зафиксирован локальный минимум 20111 и локольный максимум 64722 https://www.auchan.ru/pokupki/catalog/product/view/id/54812 токого вида запросы приводят к переадресации на другие страницы типа https://www.auchan.ru/pokupki/e-s-nabor-5-pr-verse.html? такой вид адреса не позволяет регулярно считать всю базу поэтому надо сделать файл с набором переадресаций для этого используем curl и Location curl -I https://www.auchan.ru/pokupki/catalog/product/view/id/54812 | grep Location > aa команда записывает в файл переадресацию на страницу с товаром https://www.auchan.ru/pokupki/e-s-nabor-5-pr-verse.html? {+(>сайт<=>[>auchan.ru/pokupki/e-s-nabor-posudy-8-predm-erst.html?<]<)(>И<=>[>{+(>тег<=>[>
<]<)+}<]<)+} работает {+(>сайт<=>[>e-s-nabor-posudy-8-predm-erst.html?<]<)(>И<=>[>{+(>тег<=>[><div id="main"></div><]<)+}<]<)+} Вывод: считать базу можно и целесообразно. трудности с картинками (работают через скрипты, очень неудобно). Предется заняться ими на стадии синхронизации ========================================================= 26.06.2016 Ресурс https://www.ulmart.ru/ (ЮЛМАРТ) База данных товаров видна по адресу https://www.auchan.ru/pokupki/catalog/product/view/id/ далее следует 6-7 значный номер (скорее всег<Вставка 21.07.2016> После частичной реализации и анализа появилась потребность в организации следующей схемы: - организуем дерево для хранения описаний товаров, текущей информации по ценам и фото его структура - стандартная для pibase t/ - (t|i) - (0|1|2|3|4|5|6|7|8,9) - (0|1|2|3|4|5|6|7|8,9) - (0|1|2|3|4|5|6|7|8,9) файлы с описанием товаров храняться с расширением .html с ценами .prc в ветке t/t/*/*/* файлы с фото товаров храняться в ветке t/i/*/*/* - обработку текущей цены организовать как постоянный процесс сканирования инет с записью текущих цен и продавцов в соответствующий товару файл с расширением .prc в виде комъектов для каждого предложения. образец комъекта: {+(>область<=>предложение товара<)(>Продавец<=>ашан<)(>Дата<=>21.07.2016<)(>цена<=>39200.00<)+} - расширяем функцию стандартного вывода комъекта выдачей в специальном формате файла *.prc в удобном формате. </Вставка 21.07.2016> о внутренний идентификатор для их системы) зафиксирован локальный минимум 62844 и локольный максимум 3879688 https://www.ulmart.ru/goods/329446 {+(>сайт<=>[>ulmart.ru/goods/329446<]<)(>И<=>[>{+(>тег<=>[>
<]<)+}<]<)+} работает {+(>сайт<=>[>ulmart.ru/goods/63922<]<)(>И<=>[>{+(>тег<=>[>
<]<)+}<]<)(>И<=>[>{+(>тег<=>[>
<]<)+}<]<)+} работает
{+(>сайт<=>[>ulmart.ru/goods/329446<]<)(>И<=>[>{+(>тег<=>[><div class="b-page__body"></div><]<)+}<]<)+} В отличие от яндекса нет списка предложений по каждому товару. Это и понятно, юлмарт - интернет магазин. Вывод: считать базу можно и целесообразно. с картинками есть вопросы. На них логитип юлмарта. предется брать из других источников. фото: Компактный фотоаппарат Sony Cyber-shot DSC-RX100 Black ========================================================= 26.06.2016 Ресурс http://www.ozon.ru/ (ОЗОН) База данных товаров видна по адресу https://www.ozon.ru/context/detail/id/136090476/ далее следует 9 значный номер (скорее всего внутренний идентификатор для их системы) {+(>сайт<=>[>ozon.ru/context/detail/id/136090476/<]<)(>И<=>[>{+(>тег<=>[>
<]<)+}<]<)+} работает весь озон сделан на скриптах вытащить из них описание товара проблематично Вывод: считать базу нельзя вернее можно, но для этого надо делать дополнительные и долгие исследования или готовые парсенги http://ozon2.ru/parser/ (но с ними канители ещё больше). ========================================================= 27.06.2016 Общий вывод по ресурсам: будем формировать базу по яндексу,ашану и юлмарту ----------------------ЯНДЕКС подготовлен шаблон для преобразования товаров с яндекса в комъекты ВИПРОС тестовый результат базы товаров для ЯНДЕКСа ----------------------АШАН 28.06.2016 ----------------------------------auchan.bsh скрипт для адресов товара echo "Скрипт для формирования ссылок на товары из АШАНА!" for i in {20000..70000}; # меняем от 20000 до 70000 do echo "curl -I https://www.auchan.ru/pokupki/catalog/product/view/id/"$i "| grep Location >> auchan" done -----------------------------------результат формирования адресов товара по команде bash auchan.bsh > com.com Location: https://www.auchan.ru/pokupki/e-s-nabor-5-pr-verse.html? Location: https://www.auchan.ru/pokupki/futbolka-s-korotkim-rukavom-r119-131-sm.html? Location: https://www.auchan.ru/pokupki/e-s-nabor-posudy-8-predm-erst.html? Location: https://www.auchan.ru/pokupki/bolero-s-dlinnym-rukavom-131-143-sm-1.html? Location: https://www.auchan.ru/pokupki/mddi-dzhinsy-5k-d-m-7-14-986577.html? Location: https://www.auchan.ru/pokupki/esd-118160-futb-d-r-dd-11-12l.html? Location: https://www.auchan.ru/pokupki/esd-118164-tolstovka-dm-7-8l.html? ... ---------------------------------- подготовлен шаблон для преобразования товаров с АШАНа в комъекты ВИПРОС тестовый результат базы товаров для АШАНА ----------------------ЮЛМАРТ 11.07.2016 было исследовано, что запрос curl https://www.ulmart.ru/goods/62840 -v в случае отсутствия товара с таким id выдает код 302 с указанием в Location главной страницы сайта. Поэтому нижеприведенный скрипт отсекает все id номера с кодом возврата 302. ----------------------------------ulmart.bsh скрипт для адресов товара echo "Скрипт для формирования ссылок на товары из ЮЛМАРТА! файл ulmart.bsh" echo $date > ~/work/tmp/tt for i in {63846..64845}; # меняем от 60 000 до 6 000 000 do echo "$i" >> ~/work/tmp/tt echo "curl https://www.ulmart.ru/goods/"$i" -v --dump-header aaa1" > aaa cat aaa | bash grep "HTTP\/1\.1" aaa1 >> ~/work/tmp/tt done echo "last="$i >> ~/work/tmp/ulmart sed -r '/^[0-9]{5,7}$/N ; /^[0-9]{5,7}\nHTTP\/1\.1 302 Found/d;' tt >> tt1 sed -r '/^[0-9]{5,7}$/N ; s/^([0-9]{5,7})\nHTTP\/1\.1 200 OK/\1/g;' tt1 >> ulmart rm tt rm tt1 ---------------------------------- в результате получается файл с id номерами товаров из базы например: ---------------------------------- 62844 62846 63251 63575 63713 63714 63729 63914 63915 63922 63941 64665 64695 ---------------------------------- подготовлен шаблон для преобразования товаров с юлмарта в комъекты ВИПРОС <Изменение 21.07.2016> Останавливаю обработку всех баз кроме яндекса (причина: после обработки появились разорванные теги script которых не должно быть, а во вторых в яндексе есть все товары с этих сайтов, так, что не имеет смысла делапть двойную работу). Всю технологию отработаю на 2-3 образцах товара, а затем вернусь к чтению с яндекса всего массива товаров. </Изменение 21.07.2016> ----------------------------------26.07.2016 В принципе задача решена. В результате реализации Этапа I создана возможность отображения всех товаров в ВИПРОС из yandex-market. Это показано на примере трёх товаров. Покажи список товаров. Сам процесс очень простой: - запускаем специально написанную функцию считывающую все товары в виде комъектов содержащих описание с yandex-market в файл ~/t/t/0/0/0/tt0000001.html , определяем его как источник. - запускается специальный скрипт который делает следующее: - выделяет описание заданных свойств из источника; - считывает фотографию товара из инет и записывает её в файл ~/t/i/0/0/0/ti0000001.jpeg ; - создает комъект для загрузки в ВИПРОС, содержащий отображение товара; - записывает комъект в общий файл загрузки для импорта в ВИПРОС x_gen_tovar.txt - все товары загружаются в ВИПРОС обращением: {+(>действие<=>запомнить<)(>клиент<=>комъект<)(>файл<=>/home/pau/tmp/x_gen_tovar.txt<) +} Вот пример комъекта для товара с нашим порядковым номером (>№<=>1<) и id яндекса (>id<=>12507105<) {+(>Область<=>товар<)(>Бренд<=>Panasonic<)(>Обозначение<=>TX-40CSR520 (описание)<)(>Обозначение<=>TX-40CSR520<)(>image<=>[>https://mdata.yandex.net/i?path=b0514111147_img_id1959283688680568149.jpeg<]<)(>bestRating<=>5<)(>ratingValue<=>4.0<)(>ratingCount<=>8<)(>reviewCount<=>6<)(>Товары<=>Телевизоры и плазменные панели<)(>offerCount<=>33<)(>highPrice<=>39899.51<)(>lowPrice<=>29150<)(>priceCurrency<=>RUR<)(>Тип<=>ЖК-телевизор<)(>Диагональ<=>40" (102 см)<)(>Формат экрана<=>16:9<)(>Разрешение<=>1920x1080<)(>Разрешение HD<=>1080p Full HD<)(>Светодиодная (LED) подсветка<=>есть<)(>Стереозвук<=>есть<)(>Индекс частоты обновления<=>100 Гц<)(>Smart TV<=>есть<)(>Угол обзора<=>176°<)(>Прогрессивная развертка<=>есть<)(>Поддержка стереозвука NICAM<=>есть<)(>Поддержка телевизионных стандартов<=>PAL, SECAM, NTSC<)(>Поддержка DVB-T<=>DVB-T MPEG4<)(>Поддержка DVB-T2<=>есть<)(>Поддержка DVB-C<=>DVB-C MPEG4<)(>Телетекст<=>с памятью на 1000 стр.<)(>Поддерживаемые форматы входного сигнала<=>480i, 480p, 576i, 576p, 720p, 1080i, 1080p<)(>Доступные разрешения при подключении к ПК<=>640x480 800x600 1024x768 1280x1024 1360x768 1920x1080 <)(>Мощность звука<=>20 Вт (2x10 Вт)<)(>Акустическая система<=>два динамика <)(>Объемное звучание<=>есть<)(>Декодеры аудио<=>Dolby Digital<)(>Поддерживаемые форматы<=>MP3, WMA, MPEG4, MKV, JPEG<)(>Входы<=>AV, компонентный, SCART, HDMI x2, USB, Ethernet (RJ-45), Wi-Fi<)(>Выходы<=>оптический<)(>Разъемы на передней/боковой панели<=>USB<)(>Версия интерфейса HDMI<=>HDMI 1.4<)(>Поддержка Wi-Fi<=>есть<)(>Разъем для наушников<=>есть<)(>Поддержка CI<=>есть, поддержка CI+<)(>Количество независимых TV-тюнеров<=>1<)(>Поддержка DLNA<=>есть<)(>Поддержка Skype<=>есть<)(>Таймер сна<=>есть<)(>Защита от детей<=>есть<)(>Цвет<=>серый<)(>Крепление на стену<=>есть<)(>Размеры с подставкой (ШxВxГ)<=>904x556x230 мм<)(>Вес с подставкой<=>12.5 кг<)(>Размеры без подставки (ШxВxГ)<=>904x518x47 мм<)(>Вес без подставки<=>10.5 кг<)(>hid<=>90639<)111(>Товар<=>яндекс<)(>id<=>12507105<)(>Описание<=>[>[▶t/t/0/0/0/tt0000001.html◀]<]<)(>№<=>1<)+} Выбор по любым свойствам товара заложен в самом ВИПРОС, поэтому отдельно его делать не надо. Достаточно в обращении показать набор заданных свойств и получить множество нужных товаров например:Тип ЖК - телевизор . В принципе можно найти любой класс товаров указав набор заданных свойств например: (>Бренд<=>Panasonic<)(>Формат экрана<=>16:9<)(>Разрешение<=>1920x1080<) Реализация Этапа II Что касается продавцов и цен, сделано пока в виде ссылок на списки магазинов с предложениями по цене. Эти списки сейчас беруться из интернет при обработке запроса, без предварительного процесса анализа цен. Это связанно с тем, что делать постоянный процесс сбора информации и отображение его в файлах типа ~/t/t/0/0/0/tt0000001.prc сейчас нецелесообразно, так как в конечном итоге он может быть координально изменен (например сделать свою партнерскую программу и самим собирать предложения от продавцов) Хочу отметить, что сделан только макет для демонстрации возможности эффективно решить поставленную задачу. При создании реального продукта необходимо проработать много тонкостей, мелочей и дизайн.

Cвойства:
дата ⇔ 25.06.2016
FF ⇔ bts1001
страницы ⇔ документации Василисы ЯВИКС
страницы ⇔ дневники Василисы ЯВИКС
© 2014-2018 ЯВИКС - все права защищены.
Наши контакты/Карта ссылок