Enhance application with new features, improved error handling, and performance optimizations. Key updates include: added data validation, retry strategies for HTTP requests, detailed logging, and support for RabbitMQ exports. Updated dependencies and enhanced README documentation for better setup instructions.
This commit is contained in:
193
README.md
193
README.md
@@ -5,6 +5,27 @@
|
||||
|
||||
Это структурированное Python-приложение для парсинга каталога товаров с сайта `elixirpeptide.ru`, сбора информации о вариантах товаров и их ценах.
|
||||
|
||||
## 🚀 Новые возможности (v2.0)
|
||||
|
||||
### ✅ Исправленные критические проблемы:
|
||||
- **Устранено дублирование кода** в `engine.py` и `database.py`
|
||||
- **Дополнены зависимости** в `requirements.txt` (pydantic, lxml, python-dotenv)
|
||||
- **Улучшена обработка ошибок** с детальной диагностикой и retry механизмом
|
||||
- **Добавлена валидация данных** на всех уровнях приложения
|
||||
|
||||
### 🎯 Новые функции:
|
||||
- **Retry стратегия** для HTTP запросов с экспоненциальной задержкой
|
||||
- **Детальная статистика** выполнения парсинга
|
||||
- **Валидация конфигурации** при запуске
|
||||
- **Поддержка переменных окружения** через `.env` файл
|
||||
- **Graceful degradation** - продолжение работы при частичных сбоях
|
||||
- **Улучшенное логирование** с категоризацией ошибок
|
||||
|
||||
### 🔧 Улучшения производительности:
|
||||
- **Адаптивные таймауты** для HTTP запросов
|
||||
- **Проверка на блокировку/капчу** в ответах сервера
|
||||
- **Оптимизированная обработка данных** с пропуском некорректных записей
|
||||
|
||||
## Структура Проекта
|
||||
|
||||
Проект организован по принципу семантического разделения ответственности для удобства поддержки и дальнейшей разработки.
|
||||
@@ -16,40 +37,164 @@
|
||||
- `database.py`: Логика работы с базой данных SQLite.
|
||||
- `logging_config.py`: Настройка системы логирования.
|
||||
- **`models.py`: [NEW FILE] Pydantic модели данных (ProductVariant, LogRecordModel).**
|
||||
- **`settings.py`: [ENHANCED] Конфигурация с валидацией и поддержкой .env**
|
||||
- `scraper/`: Пакет с логикой парсинга.
|
||||
- `engine.py`: Функции для скачивания и анализа HTML-страниц.
|
||||
- **`engine.py`: [ENHANCED] Класс Scraper с retry механизмом и улучшенной обработкой ошибок**
|
||||
- `utils/`: Пакет со вспомогательными утилитами.
|
||||
- `exporters.py`: Функции для сохранения данных в разные форматы (CSV).
|
||||
- **`exporters.py`: [ENHANCED] Функции для сохранения данных с валидацией**
|
||||
- `requirements.txt`: Список зависимостей проекта.
|
||||
- `price_data_final/`: Директория для хранения результатов (создается автоматически).
|
||||
- **`.env.example`: [NEW] Пример файла с переменными окружения**
|
||||
|
||||
## Установка и Запуск
|
||||
|
||||
1. **Клонируйте репозиторий:**
|
||||
```bash
|
||||
git clone <your-repo-url>
|
||||
cd peptide_parser_project
|
||||
```
|
||||
### 1. Клонирование и настройка окружения
|
||||
|
||||
2. **Создайте и активируйте виртуальное окружение:**
|
||||
```bash
|
||||
python -m venv venv
|
||||
source venv/bin/activate # Для Windows: venv\Scripts\activate
|
||||
```
|
||||
```bash
|
||||
git clone <your-repo-url>
|
||||
cd peptide_parser_project
|
||||
|
||||
3. **Установите зависимости:**
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
# Создание виртуального окружения
|
||||
python -m venv venv
|
||||
source venv/bin/activate # Для Windows: venv\Scripts\activate
|
||||
|
||||
4. **Запустите парсер:**
|
||||
Все настройки находятся в файле `src/config.py`. Вы можете изменить их перед запуском.
|
||||
```bash
|
||||
python src/main.py
|
||||
```
|
||||
# Установка зависимостей
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 2. Настройка конфигурации
|
||||
|
||||
#### Вариант A: Через переменные окружения
|
||||
```bash
|
||||
# Создайте файл .env на основе .env.example
|
||||
cp .env.example .env
|
||||
|
||||
# Отредактируйте .env файл под ваши нужды
|
||||
nano .env
|
||||
```
|
||||
|
||||
#### Вариант B: Прямое редактирование настроек
|
||||
Отредактируйте `src/core/settings.py` для изменения настроек по умолчанию.
|
||||
|
||||
### 3. Запуск парсера
|
||||
|
||||
```bash
|
||||
python src/main.py
|
||||
```
|
||||
|
||||
## Конфигурация
|
||||
|
||||
### Переменные окружения (.env файл)
|
||||
|
||||
| Переменная | Описание | По умолчанию |
|
||||
|------------|----------|--------------|
|
||||
| `PARSER_BASE_URL` | Базовый URL сайта | `https://elixirpeptide.ru` |
|
||||
| `PARSER_CATALOG_URL` | URL каталога товаров | `https://elixirpeptide.ru/catalog/` |
|
||||
| `PARSER_SAVE_TO_CSV` | Сохранять в CSV | `true` |
|
||||
| `PARSER_SAVE_TO_DB` | Сохранять в базу данных | `true` |
|
||||
| `PARSER_LOG_TO_DB` | Логировать в базу данных | `true` |
|
||||
| `PARSER_TIMEOUT` | Таймаут HTTP запросов (сек) | `30` |
|
||||
| `PARSER_DELAY` | Задержка между запросами (сек) | `1.0` |
|
||||
| `PARSER_RETRIES` | Максимум попыток для запросов | `3` |
|
||||
|
||||
### Настройки производительности
|
||||
|
||||
- **Таймаут запросов**: 30 секунд (настраивается)
|
||||
- **Задержка между запросами**: 1 секунда (настраивается)
|
||||
- **Retry стратегия**: 3 попытки с экспоненциальной задержкой
|
||||
- **Graceful degradation**: Продолжение работы при ошибках отдельных запросов
|
||||
|
||||
## Результаты
|
||||
|
||||
- Если `SAVE_TO_CSV = True`, в директории `price_data_final/` будет создан CSV-файл с ценами.
|
||||
- Если `SAVE_TO_DB = True`, в той же директории будет создан или обновлен файл `parser_data.db`.
|
||||
- Если `LOG_TO_DB = True`, все логи сессии будут также записаны в таблицу `logs` в базе данных.
|
||||
### Файлы результатов
|
||||
|
||||
- **CSV файл**: `price_data_final/prices_full_catalog_YYYY-MM-DD_HHMMSS.csv`
|
||||
- **База данных**: `price_data_final/parser_data.db` (SQLite)
|
||||
|
||||
### Структура данных
|
||||
|
||||
```csv
|
||||
name,volume,price
|
||||
"Peptide X","30ml",1500
|
||||
"Peptide Y","50ml",2500
|
||||
```
|
||||
|
||||
### Логирование
|
||||
|
||||
- **Консольные логи**: Детальная информация о процессе парсинга
|
||||
- **Логи в БД**: Если `PARSER_LOG_TO_DB=true`, все логи сохраняются в таблицу `logs`
|
||||
|
||||
## Обработка ошибок
|
||||
|
||||
### Типы обрабатываемых ошибок
|
||||
|
||||
1. **Сетевые ошибки**: Timeout, ConnectionError, HTTPError
|
||||
2. **Ошибки парсинга**: Отсутствующие элементы, некорректные данные
|
||||
3. **Ошибки файловой системы**: Права доступа, отсутствие директорий
|
||||
4. **Ошибки базы данных**: SQLite ошибки, проблемы с подключением
|
||||
|
||||
### Стратегия восстановления
|
||||
|
||||
- **Retry механизм**: Автоматические повторные попытки для сетевых ошибок
|
||||
- **Graceful degradation**: Пропуск проблемных записей с продолжением работы
|
||||
- **Детальная диагностика**: Подробные логи для анализа проблем
|
||||
|
||||
## Мониторинг и статистика
|
||||
|
||||
### Статистика выполнения
|
||||
|
||||
Приложение выводит детальную статистику:
|
||||
|
||||
```
|
||||
[FINAL_STATS] Время выполнения: 45.23 секунд
|
||||
[FINAL_STATS] Успешность: 95/100 (95.0%)
|
||||
[STATS] Успешно: 95, Ошибок: 5
|
||||
```
|
||||
|
||||
### Метрики
|
||||
|
||||
- Общее количество URL для парсинга
|
||||
- Количество успешно обработанных записей
|
||||
- Количество ошибок
|
||||
- Время выполнения
|
||||
- Процент успешности
|
||||
|
||||
## Разработка
|
||||
|
||||
### Архитектурные принципы
|
||||
|
||||
1. **Разделение ответственности**: Каждый модуль отвечает за свою область
|
||||
2. **Типизация**: Использование Pydantic для валидации данных
|
||||
3. **Обработка ошибок**: Graceful handling с детальной диагностикой
|
||||
4. **Конфигурируемость**: Гибкие настройки через переменные окружения
|
||||
5. **Логирование**: Структурированное логирование на всех уровнях
|
||||
|
||||
### Добавление новых функций
|
||||
|
||||
1. **Новые форматы экспорта**: Добавьте функции в `src/utils/exporters.py`
|
||||
2. **Новые селекторы**: Обновите `ScraperSelectors` в `src/core/settings.py`
|
||||
3. **Новые поля данных**: Расширьте модель `ProductVariant` в `src/core/models.py`
|
||||
|
||||
## Устранение неполадок
|
||||
|
||||
### Частые проблемы
|
||||
|
||||
1. **"Не удается подключиться к базовому URL"**
|
||||
- Проверьте интернет-соединение
|
||||
- Убедитесь, что сайт доступен
|
||||
- Проверьте настройки прокси
|
||||
|
||||
2. **"Не найдено ни одной ссылки на товар"**
|
||||
- Проверьте CSS селекторы в настройках
|
||||
- Убедитесь, что структура сайта не изменилась
|
||||
|
||||
3. **"Ошибка при сохранении в БД"**
|
||||
- Проверьте права доступа к директории
|
||||
- Убедитесь, что SQLite поддерживается
|
||||
|
||||
### Логи для диагностики
|
||||
|
||||
Все ошибки логируются с детальной информацией. Проверьте:
|
||||
- Консольные логи при запуске
|
||||
- Логи в базе данных (если включено)
|
||||
- Файлы результатов для проверки данных
|
||||
Reference in New Issue
Block a user