Парсер товаров с интернет магазина на python

Описание задачи:
Источник (main_host): https://5karmanov.ru/
Cобрать данные по товарам сети. На выходе — два файла:
.JSON с информацией о товарах сети
.csv с информацией о магазинах сети.
JSON: товары
Пример файла: https://yadi.sk/i/lI-egM1VZ4itCg


В «categories» добавляем упорядоченный список, путь товарных категорий с сайта (женщины/мужчины/дети/мальчики/девочки/малыши), учитывая все вложенные категории. Категории сезонных коллекций, новинок, распродаж для простоты в дерево добавлять можно, но товары в них собирать крайне нежелательно (т.к. там, как правило, дублируются те товары, что присутствуют в основных товарных категориях).
Согласно спецификации под каждый цвето-размерный вариант товара создаем отдельный элемент JSON далее — «оффер».

Важно, чтобы значением id элементе outlet (идентификатор магазина) была строка, состоящая только из цифр, которая генерировалось бы стабильным образом и позволяло верно определять магазин.


В элемент picture в каждом оффере добавляем ссылки на все фотографии со страницы в максимальном доступном качестве, соответствующие ему, в том же самом порядке как они размещены на странице.
Если на странице товара присутствует его описание, то добавить его в качестве значения элемента description.
Если на странице товара помимо текущей цены присутствует старая цена, то старую цену добавить в качестве значения элемента oldprice в соответствующие офферы.
Если на странице товара есть информация о его цвете, то добавить в качестве значения элемента "param": {"Цвет": "голубой"} в соответствующие офферы товара
В каждый оффер нужно добавить элемент "param": {"Пол": "Женский"} со значением, соответствующим первичной родительской категории (женщины/мужчины/мальчики/девочки), в которой находится оффер или соответствующим значению на странице товара (если пол явным образом указан в его характеристиках): Женский/Мужской
Если пол оффера невозможно определить (на странице товара значения нет, и оффер находится в смешанной категории, например, «дети» без деления по полу, или «малыши»), то параметр «Пол» в такие офферы не добавлять
В каждый оффер нужно добавить элемент "param": {"Возраст": "Взрослый"} с возможными значениями: Взрослый / Детский / Для малышей
Available заполняем значением "true", если товар данного размера и цветовой вариации можно купить онлайн, иначе "false"
Если на странице товара присутствует информация о составе товара, то добавить ее в качестве значения элемента "param": {"Материал": "100% хлопок"}
1) Если на сайте у карточек товаров присутствует бейджи (марки/наклейки/пометки), обозначающие новинки (new / новинка / новое поступление и т.д.), то в офферы товаров, у которых они присутствуют нужно добавить элемент "param": {"Новинка": "1"} со значением 1, а в офферы товаров, у которых отсутствуют - 0.
2) Если бейджей нет, но есть категория «Новинки» (или аналогичные ей по смыслу), то добавить значения элементов «Новинка» в офферы на основании того, присутствуют соответствующие товары в данной категории или нет.
3) Если есть и бейджи, и категория, то ориентироваться на бейджи
4) Если нет ни бейджей, ни категории, то элемент «Новинка» в офферы в фиде не добавлять.
В каждый оффер добавить элемент vendor со значением, совпадающим с названием бренда товара. Если информация о бренде товара не указана или в данной сети продаются только товары бренда сети, то добавить в качестве значения элемента название бренда сети.
Артикул со страницы товара добавить в офферы в элемент vendorCode.
Значением обязательного элемента url в офферах должен быть адрес страницы товара, на которую переходит пользователь при просмотре товара (абсолютный адрес страницы).
Если на странице товара присутствует информация о стране-производителе, то добавить ее в качестве значения элемента оффера country_of_origin. "country_of_origin": "Россия"
Значения прочих обязательных элементов (name, price) заполняются тривиальным образом. CurrencyId заполняем значением RUR
shop_info заполняем в каждом JSON одинаковым образом -
"shop_info":{"url":"https://5karmanov.ru","company":"5karmanov","currencies":[["RUR","1"]],"name":"5karmanov"}

Для каждого товара печатаем свой отдельный JSON в отдельной строчке.


2. CSV: магазины
Формат: https://yadi.sk/d/wduOd7d93HLgb2

3. Задания «со звездочкой»:
Если на карточках товаров присутствует информация о наличии и остатках данного товара в розничных магазинах сети, то собираем ее следующим образом: в элемент outlets в каждом оффере собираем данные об остатках данного цвето-размерного варианта товара в физических магазинах региона Москва и Подмосковье из следующего списка городов - Москва, Одинцово, Красногорск, Химки, Долгопрудный, Лобня, Мытищи, Королёв, Юбилейный, Балашиха, Реутов, Люберцы, Котельники, Дзержинский, Лыткарино, Видное. Пример: ("outlets":[["43906011","0"],["695688821","0"]], здесь в outlets лежит список из списков с двумя значениями, первое — id магазина, второе — элемент instock(Если на сайтн есть информация о числе оставшихся в магазине товаров, соответствующих офферу, то это и есть значение instock. Если числа нет или указано «мало»/«много», то instock="0"))
Размер добавить в качестве значения элемента "param": {"Размер": ["W28/L34","INCH"]}. Первое значение списка – название размера, указаное на сайте. Второй элемент – unit. Наиболее распространенные значения размерных сеток (значения атрибута unit для данного параметра):
RU — российская размерная сетка
INT — международная размерная сетка
Прочие национальные размерные сетки - US, IT и т.д.
INCH — обозначение составных размеров для брюк и джинс (например, "27/32", где 27 - обхват талии, 32 - длина шагового шва)
Years — возраст в годах, встречается у детских товаров
Months — возраст в месяцах, встречается у детских товаров / товаров для малышей
Height — рост в сантиметрах, встречается у детских товаров
см — длина в сантиметрах, встречается у ремней


Если у товаров нет размеров / только один размер по определению (например, сумки), то атрибут unit не добавлять, а в качестве значения элемента добавить "ONE size".

Подробнее о размерах: https://yandex.ru/support/partnermarket/guides/clothes.html#h4


Обязательные требования
Язык: Python 2.7 
Кодировка: UTF-8 

Все скрипты запускаются на стоковой OC Ubuntu 14.04, версия Python 2.7.11.Любые Python-модули, необходимые для работы скрипта, можно указывать через requirements.txt.


Рекомендуемые библиотеки: 
grab 
scrapy 
beautifulsoup4 
lxml 
requests и т.д. 
Если модуль можно установить с помощью pip install -r requirements.txt – он разрешен. 



Запрещено: 
Использовать системные модули, например locale.setlocale 
Selenium 
Использовать системное окружение 
Создавать или удалять файлы / писать в них что-либо, вывод должен быть только в STDOUT

Скачать файл


Бюджет: 2000 руб.
Вид предложения: Удаленная работа (разовый заказ)
Категория: Программирование

Добавлено: 22.05.2019 в 19:53




Сделайте предложение по проекту:


Для того чтобы ответить на предложение, вам необходимо авторизоваться или зарегистрироваться на сайте


Комментарии:
Ulia Uliannafd    23.05.2019   11:22:15     

День Добрый
Готова выполнить
Обращайтесь:
Почта:uliagotyuis@gmail.com
Skype:live:ulianna197612345
Максим Трощинин    23.05.2019   10:32:07     

Доброго времени суток! Меня зовут Максим.
Изучил проект
Готов обсудить, предоставить работы

почта str_maks@inbox.ru
Скайп live:99ba279b0cf43cc5
Телеграмм @spb_str