Files
supermarket/README.md

131 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Supermarket Scraper - Magnit API
Система скрапинга товаров из магазинов Магнит через API.
## Требования
- Node.js 18+
- pnpm
- Docker и Docker Compose (для PostgreSQL)
## Установка
1. Установите зависимости:
```bash
pnpm install
```
2. Установите браузеры для Playwright:
```bash
pnpm exec playwright install chromium
```
3. Настройте переменные окружения:
```bash
cp .env.example .env
```
Отредактируйте `.env` и укажите:
- `DATABASE_URL` - строка подключения к PostgreSQL
- `MAGNIT_STORE_CODE` - код магазина для скрапинга (например, "992301")
4. Запустите PostgreSQL через Docker:
```bash
docker-compose up -d
```
5. Сгенерируйте Prisma Client:
```bash
pnpm prisma:generate
```
6. Создайте миграции Prisma:
```bash
pnpm prisma:migrate
```
## Использование
### Тестирование подключения к БД
```bash
pnpm test-db
```
### Запуск скрапинга
```bash
pnpm dev
```
Или с указанием кода магазина:
```bash
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 команды
```bash
# Генерация клиента
pnpm prisma:generate
# Создание миграции
pnpm prisma:migrate
# Открыть Prisma Studio
pnpm prisma:studio
```
### Сборка
```bash
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