Один из сервисов проекта SportHub. Парсер PDF-файла Единого календарного плана мероприятий Министерства спорта России для извлечения данных о мероприятиях за год.
- готов к изменению ссылки на файл на странице Минспорта (см. пример страницы, содержащей ссылку / II часть ЕКП / 2025)
- проверяет актуальность файла по HTTP-запросу и, если ссылка на него была обновлена, запускает парсинг
- мгновенно извлекает сырой текст из файла PDF (см. пример файла)
- парсит релевантные данные через самописный алгоритм, основанный на текстовых паттернах и состояниях
- отправляет извлечённые данные на целевой сервер в формате JSON по частям
- Python — язык программирования
- uv — самый быстрый пакетный менеджер для Python
- Ruff — быстрый линтер с большим количеством правил
- Docker — платформа для контейнеризации
- Seq — сервер для анализа логов и трассировки
- PyMuPDF — высокопроизводительный парсер PDF
- FastAPI — веб-фреймворк для создания API
- HTTPX — асинхронный HTTP-клиент
- Uvicorn — высокопроизводительный ASGI сервер
Warning
Для работы парсера не забудьте запустить сервер-приёмник, на который будут отправляться данные. Запуск парсера
осуществляется отправкой пустого POST-запроса на единственный эндпоинт <адрес сервера парсера>/run-parser
.
- Клонируйте репозиторий и перейдите в его папку.
- Установите и Docker.
- Создайте файл
.env
на основе .env.template и настройте все описанные там параметры. - Запустите сборку образа:
docker build -t sporthub-parser .
- Теперь запускать проект можно командой:
docker run -d --name sporthub-parser-standalone -p 8000:8000 sporthub-parser
- Установите пакетный менеджер uv одним из способов. Например, для Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- Установите зависимости:
uv sync --frozen --no-dev
-
Создайте файл
.env
на основе .env.template и настройте все описанные там параметры. -
Теперь запускать проект можно командой:
uv run -m src
Если вы планируете модифицировать проект, установите все зависимости:
uv sync
Запустить линтинг кода (и автоисправление некоторых ошибок) можно через Ruff:
uv run ruff check --fix .