3.5 KiB
3.5 KiB
Supermarket Scraper - Magnit API
Система скрапинга товаров из магазинов Магнит через API.
Требования
- Node.js 18+
- pnpm
- Docker и Docker Compose (для PostgreSQL)
Установка
- Установите зависимости:
pnpm install
- Установите браузеры для Playwright:
pnpm exec playwright install chromium
- Настройте переменные окружения:
cp .env.example .env
Отредактируйте .env и укажите:
DATABASE_URL- строка подключения к PostgreSQLMAGNIT_STORE_CODE- код магазина для скрапинга (например, "992301")
- Запустите PostgreSQL через Docker:
docker-compose up -d
- Сгенерируйте Prisma Client:
pnpm prisma:generate
- Создайте миграции Prisma:
pnpm prisma:migrate
Использование
Тестирование подключения к БД
pnpm test-db
Запуск скрапинга
pnpm dev
Или с указанием кода магазина:
MAGNIT_STORE_CODE=992301 pnpm dev
Структура проекта
supermarket/
├── src/
│ ├── config/ # Конфигурация
│ ├── database/ # Prisma схема и клиент
│ ├── scrapers/ # Скраперы API
│ ├── services/ # Сервисы (Product, Parser)
│ ├── scripts/ # CLI скрипты
│ └── utils/ # Утилиты (Logger, Errors)
├── docker-compose.yml # PostgreSQL контейнер
└── package.json
API Магнита
- Endpoint:
POST /webgate/v2/goods/search - Защита: Запрос на каталог работает без защиты, но для детальной информации требуется Playwright сессия
База данных
Используется PostgreSQL с расширением pgvector (для будущих embeddings).
Модели:
Store- магазиныCategory- категории товаровProduct- товары со всеми полями из APIScrapingSession- сессии скрапинга
Разработка
Prisma команды
# Генерация клиента
pnpm prisma:generate
# Создание миграции
pnpm prisma:migrate
# Открыть Prisma Studio
pnpm prisma:studio
Сборка
pnpm build
Важные моменты
- Запрос на каталог работает без защиты - можно использовать обычный HTTP запрос
- Для получения детальной информации о товарах требуется инициализация сессии через Playwright
- Все товары получаются без фильтрации по категориям (пустой массив
categories: []) - Rate limiting: задержка 300ms между запросами
Записки
Интеграция Requestly с Cursor
Написал нейросеткой по быстрому правило по статье https://requestly.com/blog/how-to-use-cursor-to-generate-api-testcases-in-requestly/ Может быть кривое правило