Настроить Scrapy для парсинга сайта
1274 UAHСайт - wildberries.
После того как вы все настроили и собрали у себя на сервере, вы можете либо прислать архив или передать в формате образа виртуальной машины. Код должен быть полным и не обфусцирован, содержат в себе краткое описание как его запустить (список зависимостей, например) и работать с ним, запускаться и работать без ошибок и позволять парсить в автоматическом режиме раз в 24ч определенную в конфиге товарную категорию.
Чтобы не начинать с нуля, лучшее решение взять уже имеющиеся наработки других людей. Поэтому предварительно собраны такие решения.
https://github.com/wondersell/wildsearch_crawler
https://github.com/max-miksher/WildberriesParser
https://github.com/Philipp26/wildberries_scrapy
https://github.com/VivaSaravian/ScrapyTest
https://github.com/berenzorn/wildberries
https://github.com/4heck/monitoring
https://github.com/qbcir/wildberries
Механизм работы (по сути отдельные модули ПО):
1. Парсим все имеющиеся категории товаров с сайта (каталог). Сохраняем в бд
Таблица "catalog"
name - имя на русском
id - номер категории (наш номер), сквозной, инкрементируется в базе и является уникальным, начинается с 1)
upper_id - номер верхней категории - родителя (id, для верхней категории - 0)
link - ссылка
date_add - дата добавления (как только обнаружена)
newid - поле. которое устанавливается вручную, и необходимо чтобы если категория удалена, то указывать на новую категорию куда переедут товары.
marketplace - (0-ozon; 1 - wildberries)
recheck_date - последняя дата, когда категория была перепроверена.
recheck_newname - новое русское имя.
recheck_found - найден ли при перепроверка (true/false)
Парсер должен найти все категории и записать в базу. При повторном запуске, он находит категорию, сравнивает с уже имеющимися данными и если ничего не изменилось, то просто записывает текущее время и дату в recheck_date, если изменилось то пишет новое имя в recheck_newname
сравнение идет по URL.
Исходник, который умеет парсить, только в БД не пишет, и мусор некоторый выдает иногда https://github.com/wondersell/wildsearch_crawler/blob/master/wildsearch_crawler/spiders/wildberries_categories_spider.py
2. Парсим товары в категории.
Работает в 2 режимах: 1. собрать все товары и их данные на основе категории (передаем параметр id из таблицы catalog, парсит в том числе и подчиненные категории) 2. обновить данные только по тем товарам которые есть в таблице items (передаем на вход: или категорию по id, или конкретные id товаров или он будет обрабатывать все подряд)
Устанавливаем категорию которую будем парсить, например в конфиге или через командую строку (указываем id) и начинаем парсинг.
Первоначально парсер должен определить количество товаров в категории для парсинга и поддерживать продолжение парсинга если вдруг он завис или был остановлен.
Так же должна быть реализована многопоточность парсинга на основе запуска парсеров для разных категорий, который должен уметь использовать список прокси.
Вот тоже скрипт умеет парсить: https://github.com/wondersell/wildsearch_crawler/blob/master/wildsearch_crawler/spiders/wildberries_spider.py
Внутри страницы есть JSON с нужными нам данными!! Если каких-то нет, то их можно получить на следующем шаге.
Саму страницу HTML можно не разбирать почти (кроме отзывов), как это в скрипте сделано. Так и проще выбирать вариации товара в одной карточке товара, они по факту - разные артикулы и цена может быть разная.
Собираемые данные в таблицу "items"
id - номер категории (наш номер), сквозной, инкрементируется в базе и является уникальным, начинается с 1)
category_id - номер категории
art - Код товара \ артикул
marketplace - (0-ozon; 1 - wildberries)
seller - продавец (актуально для озона)
url - ссылка на товар
img_url - ссылка на фото
date_add - дата добавления (как только обнаружена)
newid - поле. которое устанавливается вручную, и необходимо чтобы если товар был удален и добавлен заново, мы смогли установить соответствие. пустой
recheck_date - последняя дата, когда категория была перепроверена.
recheck_found - найден ли при перепроверке (true/false)
Таблицы для часто изменяющихся данных:
"cost" - цены
id - номер, сквозной, инкрементируется в базе и является уникальным, начинается с 1)
id_date - дата и время внесения в БД
items_id - id товара из таблицы "items"
cost - Цена
cost_new - Цена со скидкой
cost_discount - Применнные скидки
cost_discount2 - Применнные скидки
cost_discount3 - Применнные скидки
"stock" - наличие и продажи
id - номер, сквозной, инкрементируется в базе и является уникальным, начинается с 1)
id_date - дата и время
items_id - id товара из таблицы "items"
bought - Сколько раз купили
instock - Наличие
delivery - Срок доставки (дней от текущего), курьером
"reviews" - отзывы
id - номер, сквозной, инкрементируется в базе и является уникальным, начинается с 1)
id_date - дата и время
items_id - id товара из таблицы "items"
reviews - Количество отзывов
reviews_rate - Рейтинг (звезд\ бал)
3. Парсим количество товара на остатках
Должна быть возможность запуска по планировщику (типа cron) и либо должно парсить все товары из таблицы items или конкретные товары по id или категорию по id
Данные пишем в БД
Таблица "stock_stat" - остатки
id - номер, сквозной, инкрементируется в базе и является уникальным, начинается с 1
id_date - дата и время внесения в БД
items_id - id товара из таблицы "items"
stock_count - общее доступное количество
Чтобы узнать остатки, нужно сначала добавить товар в корзину через POST запрос к https://lk.wildberries.ru/product/addtobasket с уникальным номером корзины (он присваивается в cookies при заходе на страницу, даже без логина - прим. BasketUID=3e75e292-af11-464a-a2bc-4463585a69c3;) а затем перейти на страницу корзины в которой будет JSON в котором есть информаци и о цене и о складах и о доступном остатке.
Поэтому целесообразно добавлять в корзину по 50 товаров например, получить json, парсить, удалять товары из корзины и повторять.
Отзыв заказчика о сотрудничестве с Yevhen Bobyn
Настроить Scrapy для парсинга сайтаСделал быстро и был предельно внимателен. Высокий профессионализм. Рекомендую!
![]()
Отзыв фрилансера о сотрудничестве с заказчиком
Настроить Scrapy для парсинга сайтаБыло приятно сотрудничать. Понятное, хорошо проработанное, ТЗ. Буду рад еще делать проекты.
-
155 1 0 Интересная задача. Да и Вы уже пол пути прошли! Хочу участвовать в этом проекте )
Актуальные фриланс-проекты в категории Python
AI Commenting Platform для TikTok и Instagram.Цель проекта Разработать систему, которая позволяет управлять большим количеством аккаунтов TikTok и Instagram и автоматически публиковать релевантные комментарии под выбранными видео с использованием ИИ. Основной функционал1. Управление аккаунтами Необходимо реализовать… AI и машинное обучение, Python ∙ 2 часа 21 минута назад ∙ 8 ставок |
Построить модель классификации клиентов1. Есть данные клиентов в Mongo/SQL (примерно 20 000 записей с сырыми данными). 2. Необходимо на их основе построить фичи и модель классификации клиентов на поведенческие группы. 3. Проект выполнить на Python. AI и машинное обучение, Python ∙ 1 день 20 часов назад ∙ 32 ставки |
ИТ Автоматизация ведения VAT-отчетности
10 000 UAH
Необходимо разработать систему для автоматизации переноса данных о продажах из CRM в бухгалтерскую систему Wafeq. Система должна импортировать банковские и платежные отчеты, автоматически сверять платежи с инвойсами, формировать инвойсы для VAT-отчетности и минимизировать ручную… AI и машинное обучение, Python ∙ 2 дня 2 часа назад ∙ 43 ставки |
Инструмент сверки счетов с банком, картами и бухгалтеромТехническое задание: инструмент сверки счетов с банком, картами и бухгалтеромОбщая цель Нужен локальный инструмент (скрипт/небольшое приложение на Python), который запускается вручную раз в 1-2 месяца на моём компьютере и делает сверку между: Счетами, которые я выставил клиентам… Python, Десктопные приложения ∙ 2 дня 14 часов назад ∙ 42 ставки |
Автоматическая публикация видео в социальные сети по расписаниюТехническое задание (ТЗ) Автоматическая публикация видео в социальные сети по расписаниюОписание проекта Нужен скрипт/бот (Python предпочтительно, либо любое другое решение на ваш выбор — главное стабильность и простота поддержки), который автоматически публикует видео из папки… Python, Разработка ботов ∙ 3 дня 2 часа назад ∙ 59 ставок |