CoderCastrov logo
CoderCastrov
Selenium

Парсинг игровых журналов игроков с веб-сайтов NBA и ESPN

Парсинг игровых журналов игроков с веб-сайтов NBA и ESPN
просмотров
4 мин чтение
#Selenium

с использованием Selenium, Request, BeautifulSoup и Pandas

Фильм "Moneyball" показал зрителям, что принятие статистического анализа может улучшить результаты спортивной команды. Однако в нем почти не упоминалось, как персонаж Джона Хилла собрал все эти данные вместе или возможно ли для обычных спортивных энтузиастов сделать то же самое без подписки на платные сервисы.

В этом посте мы увидим, как спортивный энтузиаст может получить общедоступные спортивные данные с помощью некоторых инструментов для парсинга веб-страниц на Python для более широкого анализа.

Основная проблема, которую мы собираемся преодолеть, заключается в том, что нам нужно объединить два источника данных (nba.com и espn.com) для более полного представления и автоматизированного процесса.

Содержание

Задача #1:

Задача #2:

Псевдокод парсинга

Импорт библиотек

Шаг 1 — Посещение NBA.com

Шаг 2 — Поиск идентификаторов игроков для базы данных ESPN

Шаг 3 — Посещение ESPN.com для получения журнала игр

Выводы

Задача #1:

Как показано на скриншоте ниже, отправляя запрос URL с определенной структурой (идентификатор игрока в базе данных ESPN + год), мы можем получить статистику игр игрока в плей-офф, регулярного сезона и предсезонных матчей. В этом примере видно, что идентификатор игрока Шакила О'Нила на серверах ESPN оказался равным 614.

Пример журнала игр игрока

Если мы хотим узнать, какой идентификатор ESPN у Тима Дункана, мы можем воспользоваться поиском в Google и получить его идентификатор благодаря тому, что Google предоставляет нам наиболее релевантный результат поиска первым.

Идентификатор игрока Тима Дункана в ESPN - 215

Вызов #2:

Несмотря на то, что звезды НБА известны по всему миру, в лиге все еще есть много игроков с относительно меньшей репутацией, таких как те, которые машут полотенцами на скамейке запасных, когда звезда команды забивает или делает трехочковый бросок. Что, если мы все еще хотим получить их игровые данные?

К счастью, nba.com может предоставить нам полный список игроков, отсортированный по их именам, которые играли в выбранном сезоне, вместе с их биографиями и основными статистическими данными, как показано на скриншоте ниже.

nba.com player bios screenshot, 50 Rows out of 441, page 1 of 9

Псевдокод парсинга

Шаг 1 (с помощью selenium) - Посетить nba.com для определенного сезона и получить биографии игроков (от А до Я),

Шаг 2 (с помощью Request + BeautifulSoup) - Загуглить "имя игрока nba espn gamelog" и получить идентификатор игрока ESPN из первого результата поиска Google для каждого игрока,

Шаг 3 (с помощью Pandas read_html) - Посетить https://www.espn.com/nba/player/gamelog/_/id/ + идентификатор игрока ESPN + интересующий нас год и прочитать таблицу HTML с игровой статистикой на ESPN.

Импорт библиотек

Шаг 1 - Посещение NBA.com

Мы определяем функцию для получения таблицы с биографией игрока с nba.com. Для этого нам понадобится модуль selenium. Поскольку нам нужно нажимать на некоторые кнопки на странице (принятие файлов cookie или выбор всех результатов вместо первой страницы) и результаты html являются динамическими, что требует некоторого ожидания перед получением обновленных результатов страницы.

Нам удалось получить биографии игроков.

Шаг 2 - Поиск идентификаторов игроков в базе данных ESPN

С помощью следующего цикла мы будем искать идентификаторы ESPN для каждого игрока в этом сезоне.

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

Скриншот

Давайте получим их игровые записи.

Шаг 3 - Посещение ESPN.com для получения игровой статистики

Мы определяем функцию для получения таблицы с игровой статистикой игрока с помощью метода read_html из библиотеки pandas.

Мы выбираем игроков, которые были выбраны в 2000 году, и ищем их статистику по каждой игре для сезона 2000/2001.

Вуаля!

Скриншот

Выводы

В этом посте мы собрали публично доступные спортивные данные с разных веб-сайтов, чтобы получить более детальную информацию о каждом игроке. Если бы мы полагались только на nba.com, мы не получили бы статистику по минутам игры для каждого матча новичков NBA 2000 года. Если бы мы полагались только на espn.com, мы не получили бы полный список игроков NBA, которые были выбраны в 2000 году. Объединив различные модули парсинга, мы получили данные как из динамического, так и из статического HTML.

Со всем уважением к сервисам спортивной аналитики, требующим платной подписки, всё ещё есть надежда для обычных любителей спорта извлекать данные онлайн. Бесплатно!