Парсинг спортивных данных
Для анализа производительности необходимо использовать данные, полученные путем парсинга. Вы можете найти эти данные на веб-сайтах, таких как NBA, FIFA, NFL, Yahoo Sports и т. д. Данные также могут быть использованы для создания собственного спортивного приложения. С помощью парсинга вы можете отображать данные практически в режиме реального времени на своем приложении или веб-приложении. Сегодня в этой статье мы научимся парсить данные FIFA 2022 с Yahoo Sports.
Мы будем использовать язык Python, так как это наиболее предпочтительный язык для парсинга. В конце этой статьи вы сможете парсить данные FIFA в режиме реального времени. Парсинг спортивных данных очень прост и мы научимся делать это пошагово.
Почему использовать Python для парсинга спортивных данных
Python - самый универсальный язык и широко используется для парсинга веб-сайтов. Кроме того, у него есть специальные библиотеки для парсинга веб-сайтов.
Благодаря большому сообществу вы сможете найти решение для своих проблем, если что-то пойдет не так. Если вы новичок в парсинге веб-сайтов с помощью Python, я рекомендую вам ознакомиться с этим подробным руководством по парсингу веб-сайтов с его помощью.
Требования для парсинга спортивных данных с Yahoo
Для этого урока нам понадобится Python 3.x, и я предполагаю, что вы уже установили его на свой компьютер. Кроме того, вам нужно установить еще две библиотеки, которые будут использоваться дальше в этом уроке для парсинга веб-сайтов.
Настройка
Сначала создайте папку, а затем установите упомянутые выше библиотеки.
mkdir sports
pip install requests
pip install beautifulsoup4
Внутри этой папки создайте файл python, в котором будете писать код. Вот несколько точек данных, которые мы собираемся извлечь с целевого веб-сайта.
- Данные о текущем матче
Как парсить Yahoo Sports
Сначала мы должны сделать обычный GET-запрос к целевому URL и проверить, возвращает ли он код 200 или нет.
import requests
from bs4 import BeautifulSoup
l=list()
o={}
target_url="https://sports.yahoo.com/soccer/world-cup/scoreboard/"
resp=requests.get(target_url)
print(resp.status_code)
Позвольте мне объяснить, что мы сделали здесь. Мы объявили целевой URL, а затем сделали HTTP GET-запрос к целевому URL.
Если он печатает 200, то ваш код работает, в противном случае вы можете передать некоторые пользовательские агенты, чтобы он выглядел как настоящий браузер. Теперь мы можем использовать BS4 для извлечения полезных данных.
soup=BeautifulSoup(resp.text, 'html.parser')
Давайте найдем местоположение DOM для данных о текущем матче.
Все данные о текущем матче находятся под тегом a с классом gamecard-in_progress. Давайте объявим переменную, в которой мы можем хранить все эти данные в одном месте.
allData = soup.find("a",{"class":"gamecard-in_progress"})
teams= allData.find_all("li",{"class":"team"})
Переменная allData хранит полное дерево класса _gamecard-in_progress. _teams - это список, который содержит всю информацию о двух командах, показанных внутри блока.
Теперь вы можете проверить, где хранятся имена и счет.
Как видите, имя хранится под тегом span с атрибутом data-tst, который имеет значение _first-name. _Давайте посмотрим, где хранится счет.
Счет хранится под тегом div с классом **“Whs(nw) D(tbc) Va(m) Fw(b) Fz(27px)”. **У нас есть всю информацию, чтобы извлечь все данные, которые нам нужны для обновления текущего счета.
o["Команда-A"]=teams[0].find("span",{"data-tst":"first-name"}).text
o["Счет-A"]=teams[0].find("div",{"class":"Whs(nw) D(tbc) Va(m) Fw(b) Fz(27px)"}).text
o["Команда-B"]=teams[1].find("span",{"data-tst":"first-name"}).text
o["Счет-B"]=teams[1].find("div",{"class":"Whs(nw) D(tbc) Va(m) Fw(b) Fz(27px)"}).text
l.append(o)
print(l)
После печати вы должны получить актуальные обновления о любой игре FIFA.
Полный код
С небольшими изменениями в коде вы можете извлекать данные для предстоящих и старых игр. Но пока код будет выглядеть так.
import requests
from bs4 import BeautifulSoup
l=list()
o={}
target_url="https://sports.yahoo.com/soccer/world-cup/scoreboard/"
resp=requests.get(target_url)
soup=BeautifulSoup(resp.text, 'html.parser')
allData = soup.find("a",{"class":"gamecard-in_progress"})
teams= allData.find_all("li",{"class":"team"})
o["Команда-A"]=teams[0].find("span",{"data-tst":"first-name"}).text
o["Счет-A"]=teams[0].find("div",{"class":"Whs(nw) D(tbc) Va(m) Fw(b) Fz(27px)"}).text
o["Команда-B"]=teams[1].find("span",{"data-tst":"first-name"}).text
o["Счет-B"]=teams[1].find("div",{"class":"Whs(nw) D(tbc) Va(m) Fw(b) Fz(27px)"}).text
l.append(o)
print(l)
Заключение
Важно извлекать информацию о игроках и счетах, если вы хотите создать свое собственное приложение или веб-сайт. Извлечение данных с определенных неанглоязычных веб-сайтов и их представление на обычном английском языке может быть полезным для вашего приложения.
Python в целом является отличным языком для извлечения всей этой информации с легкостью. У него есть отличная поддержка сообщества с длинным списком библиотек, которые делают веб-парсинг очень простым для начинающих.
Однако, парсинг в большом масштабе не будет возможен с помощью этого процесса. После некоторого времени Yahoo Sports заблокирует ваш IP и ваш конвейер данных будет заблокирован навсегда. Для безпроблемного парсинга используйте Web Scraping API, который будет менять IP-адреса при каждом новом запросе и будет использовать безголовый Chrome, чтобы уменьшить вероятность блокировки.
Дополнительные ресурсы
Вот несколько дополнительных ресурсов, которые могут быть полезными во время вашего путешествия по парсингу: