127 lines
7.8 KiB
Markdown
127 lines
7.8 KiB
Markdown
# ANCHOR: Project_README
|
||
# Семантика: Документация, описывающая проект, его структуру и способ использования.
|
||
|
||
# Сервис мониторинга цен ElixirPeptide (v3.0)
|
||
|
||
Это распределенное Python-приложение для мониторинга каталога товаров с сайта `elixirpeptide.ru`. Сервис автоматически отслеживает изменения в ценах и наличии товаров, и отправляет отчеты в Telegram.
|
||
|
||
## 🚀 Архитектура (v3.0)
|
||
|
||
Проект перешел от простого парсера к полноценному сервису мониторинга с асинхронной обработкой данных.
|
||
|
||
- **Точка входа**: `monitoring_service.py` — главный скрипт, запускаемый по расписанию (cron).
|
||
- **Оркестратор**: `src/orchestrator.py` управляет процессом парсинга.
|
||
- **Анализатор**: `src/analyzer.py` сравнивает данные последнего и предпоследнего запусков, выявляя изменения.
|
||
- **Уведомления**: `src/utils/telegram_sender.py` отправляет HTML-отчеты об изменениях в Telegram.
|
||
- **Очередь сообщений**: Интеграция с **RabbitMQ** для асинхронного экспорта данных о товарах и логах.
|
||
- **База данных**: **SQLite** используется для хранения истории парсинга и данных для анализа.
|
||
|
||
## ✨ Ключевые возможности
|
||
|
||
- **Автоматический мониторинг**: Запуск по расписанию для непрерывного отслеживания.
|
||
- **Отчеты об изменениях**: Уведомления в Telegram о новых, удаленных товарах, а также изменениях цен и наличия.
|
||
- **Асинхронный экспорт**: Отправка данных в RabbitMQ для дальнейшей обработки другими системами.
|
||
- **Надежность**: Механизм retry-запросов, детальное логирование и отказоустойчивость.
|
||
- **Гибкая конфигурация**: Все параметры настраиваются через `.env` файл.
|
||
|
||
## Структура Проекта
|
||
|
||
- `monitoring_service.py`: **[NEW]** Главная точка входа для запуска по расписанию.
|
||
- `src/`: Основная директория с исходным кодом.
|
||
- `orchestrator.py`: **[NEW]** Управляет всем процессом парсинга.
|
||
- `analyzer.py`: **[NEW]** Анализирует данные и формирует отчеты.
|
||
- `main.py`: Точка входа для ручного запуска парсинга.
|
||
- `core/`: Ядро приложения.
|
||
- `settings.py`: **[ENHANCED]** Pydantic-модели для конфигурации (включая Telegram, RabbitMQ).
|
||
- `database.py`: Логика работы с базой данных SQLite.
|
||
- `rabbitmq.py`: **[NEW]** Клиент для работы с RabbitMQ.
|
||
- `scraper/`: Логика парсинга.
|
||
- `engine.py`: Улучшенный движок парсера.
|
||
- `utils/`: Вспомогательные утилиты.
|
||
- `telegram_sender.py`: **[NEW]** Отправка уведомлений в Telegram.
|
||
- `requirements.txt`: **[UPDATED]** Обновленный список зависимостей.
|
||
- `.env.example`: Пример файла с переменными окружения.
|
||
- `RABBITMQ_SETUP.md`: **[NEW]** Руководство по настройке RabbitMQ.
|
||
|
||
## Установка и Запуск
|
||
|
||
### 1. Клонирование и настройка окружения
|
||
|
||
```bash
|
||
git clone https://gitea.bebesh.ru/busya/peptide-parcer.git
|
||
cd peptide-parcer
|
||
|
||
# Создание виртуального окружения
|
||
python -m venv venv
|
||
source venv/bin/activate # Для Windows: venv\Scripts\activate
|
||
|
||
# Установка зависимостей
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
### 2. Настройка RabbitMQ (Опционально)
|
||
|
||
Для асинхронного экспорта данных требуется RabbitMQ. Рекомендуется запуск через Docker:
|
||
```bash
|
||
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
|
||
```
|
||
Подробности см. в `RABBITMQ_SETUP.md`.
|
||
|
||
### 3. Настройка конфигурации
|
||
|
||
Скопируйте `.env.example` в `.env` и заполните необходимые параметры.
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
nano .env # Отредактируйте файл
|
||
```
|
||
|
||
**Ключевые переменные окружения:**
|
||
- `TELEGRAM_BOT_TOKEN`: Токен вашего Telegram-бота.
|
||
- `TELEGRAM_CHAT_ID`: ID чата, куда будут приходить отчеты.
|
||
- `ENABLE_RABBITMQ_EXPORT`: `true` или `false` для включения/отключения экспорта в RabbitMQ.
|
||
- `RABBITMQ_HOST`, `RABBITMQ_PORT` и т.д.: Настройки подключения к RabbitMQ.
|
||
|
||
### 4. Запуск
|
||
|
||
#### Автоматический мониторинг (рекомендуется)
|
||
Настройте запуск `monitoring_service.py` через `cron` или планировщик задач.
|
||
```bash
|
||
# Пример для cron, запуск каждый час
|
||
# 0 * * * * /path/to/your/project/venv/bin/python /path/to/your/project/monitoring_service.py >> /path/to/your/project/logs/cron.log 2>&1
|
||
|
||
# Ручной запуск для проверки
|
||
python monitoring_service.py
|
||
```
|
||
|
||
#### Ручной запуск парсинга (без анализа и отчета)
|
||
```bash
|
||
python src/main.py
|
||
```
|
||
|
||
## Результаты
|
||
|
||
### Отчеты в Telegram
|
||
Сервис присылает в указанный чат отчет, если обнаруживает изменения:
|
||
- **💰 Изменились цены**: список товаров с новой и старой ценой.
|
||
- **📦 Изменилось наличие**: список товаров, которые появились или закончились.
|
||
- **✨ Новые товары**: список добавленных товаров.
|
||
- **🗑️ Удаленные товары**: список удаленных товаров.
|
||
|
||
### Данные
|
||
- **База данных**: `price_data_final/parser_data.db` — хранит всю историю парсинга.
|
||
- **CSV файл**: `price_data_final/prices_full_catalog_*.csv` — создается при ручном запуске.
|
||
- **RabbitMQ**: Сообщения с данными о товарах и логах отправляются в очереди `price_parser.products` и `price_parser.logs`.
|
||
|
||
## Устранение неполадок
|
||
|
||
1. **Не приходят сообщения в Telegram**:
|
||
- Проверьте правильность `TELEGRAM_BOT_TOKEN` и `TELEGRAM_CHAT_ID`.
|
||
- Убедитесь, что бот добавлен в чат с нужными правами.
|
||
2. **Ошибка подключения к RabbitMQ**:
|
||
- Проверьте, что RabbitMQ запущен и доступен.
|
||
- Убедитесь в корректности настроек в `.env`.
|
||
3. **Ошибки парсинга**:
|
||
- Проверьте доступность сайта `elixirpeptide.ru`.
|
||
- Возможно, изменилась структура HTML-страниц. В этом случае нужно обновить CSS-селекторы в `src/core/settings.py`.
|