Парсинг спортивных сайтов

Сергей12 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
22.09.2025

Необходимо разработать скрипт на языке Python для парсинга (скрапинга) данных с следующих сайтов:

Данные, подлежащие парсингу:

  1. Новости: Сбор актуальных новостей по спорту, включая заголовки, даты публикации, краткое описание, полный текст (если доступен), авторов, ссылки на источники и связанные изображения/медиа.

  2. Каталог: Структурированные данные по спортивным сущностям, включая:

    • Вид спорта (например, футбол, баскетбол, теннис и т.д.).

    • Страна (географическая привязка лиг, клубов и т.д.).

    • Лиги (названия, сезоны, таблицы результатов).

    • Клубы (названия, составы, статистика).

    • Спортсмены (имена, биографии, статистика, достижения).

    • События (матчи, турниры, даты, результаты, участники, травмы, голы, голевые передачи - все, что есть).

Скрипт должен использовать прокси, задержки между запросами для избежания блокировки, и не перегружать серверы.

На выходе данные должны быть организованы в структурированном виде, аналогичном примеру из приложения.

Требования к скрипту

Технологический стек

  • Язык программирования: Python (версия 3.8+).

  • Библиотеки:

    • Для парсинга: BeautifulSoup4, Scrapy или Selenium (если требуется обработка JavaScript).

    • Для HTTP-запросов: requests или httpx.

    • Для работы с данными: pandas (для манипуляции данными).

    • Для хранения:

      • Google Sheets: gspread (для интеграции с Google API).

      • PostgreSQL: psycopg2 или SQLAlchemy (для работы с БД).

    • Дополнительно: logging для логов, dotenv для хранения конфигураций (API-ключи, credentials).

  • Хранение данных:

    • Опция 1: Google Sheets – создать/обновить таблицы в Google Sheets (использовать Google Service Account для аутентификации).

    • Опция 2: PostgreSQL – схема БД с таблицами для новостей и каталога (с отношениями foreign keys для связей между сущностями).

    • Скрипт должен поддерживать выбор хранилища через конфигурацию (например, флаг в командной строке или config-файл).

  • Конфигурация: Все чувствительные данные (API-ключи, DB credentials) хранить в .env файле.

Функциональные требования

  • Парсинг новостей:

    • Собрать последние N новостей (N настраивается, по умолчанию 50) с каждого сайта.

    • Извлекать: заголовок, дата, источник, текст, URL, категория (если есть).

    • Обработать пагинацию, если новости на нескольких страницах.

  • Парсинг каталога:

    • Для каждого сайта собрать иерархические данные по видам спорта, странам, лигам и т.д.

    • Пример структуры:

      • Таблица "Sports" (вид спорта: ID, название).

      • Таблица "Countries" (страна: ID, название).

      • Таблица "Leagues" (лига: ID, спорт_ID, страна_ID, название, сезон).

      • Таблица "Clubs" (клуб: ID, лига_ID, название, статистика).

      • Таблица "Athletes" (спортсмен: ID, клуб_ID, имя, биография, статистика).

      • Таблица "Events" (событие: ID, лига_ID, дата, участники, результат).

    • Глубина парсинга: до уровня детальной страницы (например, профиль спортсмена).

  • Обработка данных:

    • Очистка данных: удаление HTML-тегов, нормализация текста, обработка дат.

    • Дедупликация: избегать дублей по URL или уникальному ID.

    • Обновление: скрипт должен поддерживать инкрементальный парсинг (только новые данные).

  • Расписание: Скрипт должен быть адаптирован для запуска по cron (например, ежедневно).

  • Логирование и ошибки:

    • Логировать процесс парсинга (успех/ошибки).

    • Обработка исключений: retry при сетевых ошибках, пропуск заблокированных страниц.

  • Производительность: Задержки между запросами (минимум 1-5 секунд), многопоточность (если применимо, но осторожно, чтобы не блокировать IP).

Нефункциональные требования

  • Безопасность: Не хранить пароли в коде; использовать HTTPS.

  • Масштабируемость: Скрипт должен работать с большим объемом данных (десятки и сотни тысяч записей).

  • Тестирование: Написать unit-тесты для ключевых функций (парсинг, сохранение).

  • Документация: README.md с инструкциями по установке, запуску, конфигурации.

  • Совместимость: Работать на Ubuntu.

Этапы работ

  1. Анализ и планирование: Изучить сайты, проверить robots.txt, спроектировать структуру данных.

  2. Разработка скрипта: Написать код для парсинга, интеграции с хранилищем.

  3. Тестирование: Тест на тестовых данных, проверка на реальных сайтах.

  4. Деплой и документация: Подготовить репозиторий, инструкции.

Критерии приемки

  • Скрипт успешно парсит данные с всех сайтов без ошибок.

  • Данные сохраняются в выбранном хранилище в структурированном виде.

  • Структура данных соответствует примеру из приложения (или логической модели, если пример не предоставлен).

  • Скрипт запускается из командной строки с параметрами (например, python script.py --storage=postgres --limit=50).

  • Нет банов во время сбора данных.


Авторизуйтесь для подачи заявки

Заявки фрилансеров