2026-04-05 01:18:08 +05:00
2026-04-05 01:18:08 +05:00
2026-04-05 01:18:08 +05:00

Supermarket Scraper - Magnit API

Система скрапинга товаров из магазинов Магнит через API.

Требования

  • Node.js 18+
  • pnpm
  • Docker и Docker Compose (для PostgreSQL)

Установка

  1. Установите зависимости:
pnpm install
  1. Установите браузеры для Playwright:
pnpm exec playwright install chromium
  1. Настройте переменные окружения:
cp .env.example .env

Отредактируйте .env и укажите:

  • DATABASE_URL - строка подключения к PostgreSQL
  • MAGNIT_STORE_CODE - код магазина для скрапинга (например, "992301")
  1. Запустите PostgreSQL через Docker:
docker-compose up -d
  1. Сгенерируйте Prisma Client:
pnpm prisma:generate
  1. Создайте миграции 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 - товары со всеми полями из API
  • ScrapingSession - сессии скрапинга

Разработка

Prisma команды

# Генерация клиента
pnpm prisma:generate

# Создание миграции
pnpm prisma:migrate

# Открыть Prisma Studio
pnpm prisma:studio

Сборка

pnpm build

Важные моменты

  1. Запрос на каталог работает без защиты - можно использовать обычный HTTP запрос
  2. Для получения детальной информации о товарах требуется инициализация сессии через Playwright
  3. Все товары получаются без фильтрации по категориям (пустой массив categories: [])
  4. Rate limiting: задержка 300ms между запросами

Записки

Интеграция Requestly с Cursor

Написал нейросеткой по быстрому правило по статье https://requestly.com/blog/how-to-use-cursor-to-generate-api-testcases-in-requestly/ Может быть кривое правило

todos

Description
No description provided
Readme 198 KiB
Languages
TypeScript 100%