Простой сервис для парсинга и анализа данных о товарах с сайта Wildberries. Проект включает в себя бэкенд на Django с API, фоновый парсер на Celery и динамический фронтенд для фильтрации и визуализации данных.
- Асинхронный парсер: Сбор данных о товарах с Wildberries по URL категории, работающий в фоновом режиме.
- REST API: Эндпоинт для получения списка товаров с поддержкой фильтрации по цене, рейтингу и количеству отзывов, а также с возможностью сортировки.
- Интерактивный фронтенд:
- Динамическая таблица с товарами, которая обновляется без перезагрузки страницы.
- Фильтры для гибкой настройки выборки данных.
- Интерактивные графики для визуализации аналитики.
- Полная контейнеризация: Проект полностью обернут в Docker, что обеспечивает быстрый запуск и консистентность окружения.
- Python 3.11
- Django 5.2
- Django REST Framework для создания REST API.
- Celery для выполнения фоновых задач (парсинга).
- PostgreSQL в качестве основной базы данных.
- Redis как брокер сообщений для Celery.
- Vanilla JavaScript (ES6+): Без фреймворков для легковесности и простоты.
- Chart.js: Для создания интерактивных графиков.
- noUiSlider: Для удобного слайдера выбора диапазона цен.
- HTML5 / CSS3
- Docker / Docker Compose: для оркестрации и управления контейнерами.
При разработке проекта были приняты следующие ключевые решения:
-
Сервисный слой (Services & Selectors) Проект следует принципам HackSoft Django Styleguide. Бизнес-логика вынесена из Views и моделей в отдельные модули:
services.py: Содержат логику, изменяющую состояние системы (создание/обновление данных, запуск парсинга).selectors.py: Содержат логику для получения данных из базы данных (фильтрация, выборка). Это делает код более чистым, тестируемым и переиспользуемым.
-
Асинхронный парсинг Парсинг — это долгий процесс. Чтобы не заставлять пользователя ждать и не блокировать API, сбор данных выполняется асинхронно с помощью Celery. API-эндпоинт лишь инициирует задачу, которая выполняется в отдельном воркер-процессе.
-
Изолированное окружение Весь проект (Django, PostgreSQL, Redis, Celery) запускается в Docker-контейнерах. Это решает проблему зависимостей, гарантирует, что окружение для разработки и продакшена идентично, и позволяет запустить проект одной командой.
Для запуска проекта на вашем компьютере должны быть установлены Docker и Docker Compose.
git clone https://github.com/fluffy-dev/WildberriesVisualization.git
cd WildberriesVisualizationПроект использует переменные окружения для конфигурации. Скопируйте файл-пример .env.example в .env:
# Для Linux / macOS
cp .env.example .env
# Для Windows
copy .env.example .envФайл .env уже содержит все необходимые для локального запуска значения. Вам не нужно ничего менять.
Выполните следующую команду в корневой директории проекта:
docker-compose up --build -dЭта команда соберет Docker-образы для Django-приложения, запустит все необходимые сервисы в фоновом режиме (-d) и свяжет их вместе.
После первого запуска нужно создать таблицы в базе данных. Выполните команду:
docker-compose exec web python src/manage.py migrateПроект запущен! Основной интерфейс доступен по адресу http://localhost:8000.
Чтобы наполнить базу данных, нужно запустить задачу парсинга. Для этого отправьте POST-запрос на специальный API-эндпоинт.
Пример с помощью cURL (для Windows CMD):
curl -X POST http://localhost:8000/api/products/start-parsing/ -H "Content-Type: application/json" -d "{\"url\": \"https://www.wildberries.ru/catalog/elektronika/noutbuki-i-kompyutery/noutbuki-ultrabuki\"}"Примечание: Командная строка Windows требует экранирования двойных кавычек. Для более удобной работы рекомендуется использовать API-клиенты вроде Postman или Insomnia.
В ответ вы получите {"message": "Parsing task has been started."}. Процесс парсинга можно отслеживать в логах Celery-воркера:
docker-compose logs -f workerПосле завершения парсинга откройте в браузере http://localhost:8000 и пользуйтесь интерактивными фильтрами и графиками.
Все команды выполняются через docker-compose exec web.
-
Создать миграции (после изменения моделей в
models.py):docker-compose exec web python src/manage.py makemigrations -
Применить миграции:
docker-compose exec web python src/manage.py migrate -
Создать суперпользователя (для доступа к админ-панели Django):
docker-compose exec web python src/manage.py createsuperuser -
Остановить все контейнеры:
docker-compose down
