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

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

sports.ru/

fbref.com/

soccerway.com/ (учитывается как один источник, несмотря на повтор в списке)

www.whoscored.com/

www.sofascore.com/

www.transfermarkt.com/

flashscore.com/

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

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

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

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

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

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

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

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

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

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

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

Требования к скрипту
Технологический стек
Язык программирования: 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.

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

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

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

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

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

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

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

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

Нет банов во время сбора данных.
Опубликован 07.10.2025 в 12:27
Заказ находится в архиве

Выберите способ верификации:

Обновите страницу после прохождения верификации.