10 KiB
10 KiB
ANCHOR: Project_README
Семантика: Документация, описывающая проект, его структуру и способ использования.
Парсер цен для ElixirPeptide
Это структурированное Python-приложение для парсинга каталога товаров с сайта elixirpeptide.ru, сбора информации о вариантах товаров и их ценах.
🚀 Новые возможности (v2.0)
✅ Исправленные критические проблемы:
- Устранено дублирование кода в
engine.pyиdatabase.py - Дополнены зависимости в
requirements.txt(pydantic, lxml, python-dotenv) - Улучшена обработка ошибок с детальной диагностикой и retry механизмом
- Добавлена валидация данных на всех уровнях приложения
🎯 Новые функции:
- Retry стратегия для HTTP запросов с экспоненциальной задержкой
- Детальная статистика выполнения парсинга
- Валидация конфигурации при запуске
- Поддержка переменных окружения через
.envфайл - Graceful degradation - продолжение работы при частичных сбоях
- Улучшенное логирование с категоризацией ошибок
🔧 Улучшения производительности:
- Адаптивные таймауты для HTTP запросов
- Проверка на блокировку/капчу в ответах сервера
- Оптимизированная обработка данных с пропуском некорректных записей
Структура Проекта
Проект организован по принципу семантического разделения ответственности для удобства поддержки и дальнейшей разработки.
src/: Основная директория с исходным кодом.config.py: Все настройки (URL, селекторы, флаги сохранения).main.py: Точка входа в приложение, оркестратор процесса.core/: Пакет с ядром приложения.database.py: Логика работы с базой данных SQLite.logging_config.py: Настройка системы логирования.models.py: [NEW FILE] Pydantic модели данных (ProductVariant, LogRecordModel).settings.py: [ENHANCED] Конфигурация с валидацией и поддержкой .env
scraper/: Пакет с логикой парсинга.engine.py: [ENHANCED] Класс Scraper с retry механизмом и улучшенной обработкой ошибок
utils/: Пакет со вспомогательными утилитами.exporters.py: [ENHANCED] Функции для сохранения данных с валидацией
requirements.txt: Список зависимостей проекта.price_data_final/: Директория для хранения результатов (создается автоматически)..env.example: [NEW] Пример файла с переменными окружения
Установка и Запуск
1. Клонирование и настройка окружения
git clone <your-repo-url>
cd peptide_parser_project
# Создание виртуального окружения
python -m venv venv
source venv/bin/activate # Для Windows: venv\Scripts\activate
# Установка зависимостей
pip install -r requirements.txt
2. Настройка конфигурации
Вариант A: Через переменные окружения
# Создайте файл .env на основе .env.example
cp .env.example .env
# Отредактируйте .env файл под ваши нужды
nano .env
Вариант B: Прямое редактирование настроек
Отредактируйте src/core/settings.py для изменения настроек по умолчанию.
3. Запуск парсера
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: Продолжение работы при ошибках отдельных запросов
Результаты
Файлы результатов
- CSV файл:
price_data_final/prices_full_catalog_YYYY-MM-DD_HHMMSS.csv - База данных:
price_data_final/parser_data.db(SQLite)
Структура данных
name,volume,price
"Peptide X","30ml",1500
"Peptide Y","50ml",2500
Логирование
- Консольные логи: Детальная информация о процессе парсинга
- Логи в БД: Если
PARSER_LOG_TO_DB=true, все логи сохраняются в таблицуlogs
Обработка ошибок
Типы обрабатываемых ошибок
- Сетевые ошибки: Timeout, ConnectionError, HTTPError
- Ошибки парсинга: Отсутствующие элементы, некорректные данные
- Ошибки файловой системы: Права доступа, отсутствие директорий
- Ошибки базы данных: SQLite ошибки, проблемы с подключением
Стратегия восстановления
- Retry механизм: Автоматические повторные попытки для сетевых ошибок
- Graceful degradation: Пропуск проблемных записей с продолжением работы
- Детальная диагностика: Подробные логи для анализа проблем
Мониторинг и статистика
Статистика выполнения
Приложение выводит детальную статистику:
[FINAL_STATS] Время выполнения: 45.23 секунд
[FINAL_STATS] Успешность: 95/100 (95.0%)
[STATS] Успешно: 95, Ошибок: 5
Метрики
- Общее количество URL для парсинга
- Количество успешно обработанных записей
- Количество ошибок
- Время выполнения
- Процент успешности
Разработка
Архитектурные принципы
- Разделение ответственности: Каждый модуль отвечает за свою область
- Типизация: Использование Pydantic для валидации данных
- Обработка ошибок: Graceful handling с детальной диагностикой
- Конфигурируемость: Гибкие настройки через переменные окружения
- Логирование: Структурированное логирование на всех уровнях
Добавление новых функций
- Новые форматы экспорта: Добавьте функции в
src/utils/exporters.py - Новые селекторы: Обновите
ScraperSelectorsвsrc/core/settings.py - Новые поля данных: Расширьте модель
ProductVariantвsrc/core/models.py
Устранение неполадок
Частые проблемы
-
"Не удается подключиться к базовому URL"
- Проверьте интернет-соединение
- Убедитесь, что сайт доступен
- Проверьте настройки прокси
-
"Не найдено ни одной ссылки на товар"
- Проверьте CSS селекторы в настройках
- Убедитесь, что структура сайта не изменилась
-
"Ошибка при сохранении в БД"
- Проверьте права доступа к директории
- Убедитесь, что SQLite поддерживается
Логи для диагностики
Все ошибки логируются с детальной информацией. Проверьте:
- Консольные логи при запуске
- Логи в базе данных (если включено)
- Файлы результатов для проверки данных