CoderCastrov logo
CoderCastrov
Яху Спортс

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

Парсинг спортивных данных
просмотров
4 мин чтение
#Яху Спортс

Для анализа производительности необходимо использовать данные, полученные путем парсинга. Вы можете найти эти данные на веб-сайтах, таких как 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, чтобы уменьшить вероятность блокировки.


Дополнительные ресурсы

Вот несколько дополнительных ресурсов, которые могут быть полезными во время вашего путешествия по парсингу: