Skip to content

isad2023/hackathon_parser

Repository files navigation

Hackathon Parser Service

Сервис для автоматического парсинга хакатонов с сайта хакатоны.рус с сохранением в PostgreSQL и предоставлением REST API.

Возможности

  • 🕒 Автоматический парсинг каждые 30 минут
  • 🐳 Полная контейнеризация с Docker Compose
  • 🗄️ Сохранение данных в PostgreSQL
  • 🚀 REST API на FastAPI
  • 📊 Веб-интерфейс для просмотра результатов
  • 🔍 Поиск и фильтрация хакатонов
  • 📝 Подробное логирование

Архитектура

├── main.py              # Основное приложение с планировщиком
├── api.py               # FastAPI эндпоинты
├── parser_service.py    # Логика парсинга
├── database.py          # Модели и работа с БД
├── Dockerfile           # Образ парсера
├── docker-compose.yml   # Оркестрация сервисов
├── requirements.txt     # Python зависимости
└── init.sql            # Инициализация БД

Быстрый старт

1. Клонирование и запуск

# Клонируем репозиторий
git clone <repository-url>
cd hackParser

# Создаем директорию для логов
mkdir -p logs

# Запускаем сервисы
docker-compose up -d

2. Проверка работы

# Проверяем статус сервисов
docker-compose ps

# Проверяем логи
docker-compose logs -f parser

# Проверяем API
curl http://localhost:8000/health

API Эндпоинты

Основные эндпоинты

  • GET / - Информация о сервисе
  • GET /health - Проверка состояния
  • GET /docs - Swagger документация
  • POST /parse/manual - Ручной запуск парсинга

Работа с хакатонами

  • GET /hackathons - Список хакатонов с пагинацией
  • GET /hackathons/latest?limit=20 - Последние хакатоны
  • GET /hackathons/{id} - Конкретный хакатон
  • GET /hackathons/search/{query} - Поиск по названию
  • GET /stats - Статистика

Примеры запросов

# Получить последние 10 хакатонов
curl "http://localhost:8000/hackathons/latest?limit=10"

# Поиск хакатонов
curl "http://localhost:8000/hackathons/search/AI"

# Статистика
curl "http://localhost:8000/stats"

# Ручной запуск парсинга
curl -X POST "http://localhost:8000/parse/manual"

База данных

Структура таблицы hackathons

CREATE TABLE hackathons (
    id SERIAL PRIMARY KEY,
    name VARCHAR(500) NOT NULL,
    image_url TEXT,
    link_url TEXT,
    tags TEXT[],
    parsed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Подключение к БД

# Подключение к PostgreSQL
docker exec -it hackathon_postgres psql -U hackathon_user -d hackathon_db

# Просмотр данных
SELECT * FROM hackathons ORDER BY parsed_at DESC LIMIT 10;

Конфигурация

Переменные окружения

# В docker-compose.yml
environment:
  - DATABASE_URL=postgresql://hackathon_user:hackathon_password@postgres:5432/hackathon_db
  - DISPLAY=:99

Настройка расписания

По умолчанию парсинг запускается каждые 30 минут. Для изменения отредактируйте в main.py:

scheduler.add_job(
    func=scheduled_parsing,
    trigger=IntervalTrigger(minutes=30),  # Измените на нужное значение
    ...
)

Мониторинг и логи

Просмотр логов

# Логи парсера
docker-compose logs -f parser

# Логи PostgreSQL
docker-compose logs -f postgres

# Все логи
docker-compose logs -f

Файлы логов

Логи сохраняются в директории ./logs/:

  • main.log - основное приложение
  • parser.log - парсинг

Разработка

Локальная разработка

# Создание виртуального окружения
python -m venv venv
source venv/bin/activate  # Linux/Mac
# или
venv\Scripts\activate     # Windows

# Установка зависимостей
pip install -r requirements.txt

# Запуск только PostgreSQL
docker-compose up postgres -d

# Запуск приложения локально
export DATABASE_URL="postgresql://hackathon_user:hackathon_password@localhost:5432/hackathon_db"
python main.py

Тестирование парсера

# Запуск только парсера
python parser_service.py

# Ручной запуск через API
curl -X POST "http://localhost:8000/parse/manual"

Устранение неполадок

Проблемы с Firefox/Geckodriver

# Проверка Firefox в контейнере
docker exec -it hackathon_parser firefox --version

# Проверка geckodriver
docker exec -it hackathon_parser geckodriver --version

Проблемы с базой данных

# Перезапуск PostgreSQL
docker-compose restart postgres

# Очистка данных
docker-compose down -v
docker-compose up -d

Проблемы с парсингом

# Проверка логов парсера
docker-compose logs parser | grep ERROR

# Ручной запуск парсинга для отладки
docker exec -it hackathon_parser python parser_service.py

Масштабирование

Увеличение частоты парсинга

Измените интервал в main.py:

trigger=IntervalTrigger(minutes=15)  # Каждые 15 минут

Добавление новых источников

  1. Расширьте parser_service.py
  2. Добавьте новые поля в модель Hackathon
  3. Обновите API эндпоинты

Горизонтальное масштабирование

Для высоких нагрузок можно:

  • Использовать Redis для координации задач
  • Добавить балансировщик нагрузки
  • Разделить парсинг и API на разные сервисы

Безопасность

  • Используйте сильные пароли для PostgreSQL
  • Настройте firewall для продакшена
  • Регулярно обновляйте зависимости
  • Используйте HTTPS в продакшене

Лицензия

MIT License

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages