Соберите таблицу лидеров хоум-рана из Baseball Savant с помощью R

Я пытаюсь очистить таблицу со следующей веб-страницы, используя R:

https://baseballsavant.mlb.com/leaderboard/home-runs?player_type=Batter&team=&min=0&cat=adj_xhr&year=2020

При проверке веб-страницы я вижу в HTML-коде следующее:

SelectorGadget просто называет это «таблицей». Однако у меня возникли проблемы с извлечением таблицы в студию R. Это то, что я пытаюсь сейчас:

install.packages("rvest")
install.packages("dplyr")

library(rvest)
library(dplyr)
url <- "https://baseballsavant.mlb.com/leaderboard/home-runs?player_type=Batter&team=&min=0&cat=adj_xhr&year=2020"

# Read the webpage
webpage <- read_html(url)

# Extract the table
table <- webpage %>%
  html_node(xpath = '//*[@id = "homeruns"]/table') %>%
  html_table()

# View the table
print(table)

Любая помощь будет принята с благодарностью!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Веб-страница использует JavaScript для отображения страницы, поэтому данные не сохраняются в элементе таблицы. К счастью, вместо этого данные хранятся в элементе «script» как JSON.

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

library(rvest)
library(dplyr)
url <- "https://baseballsavant.mlb.com/leaderboard/home-runs?player_type=Batter&team=&min=0&cat=adj_xhr&year=2020"

# Read the webpage
webpage <- read_html(url)

# Extract the table
scripts <- webpage %>%
   html_elements('script') 

#data is stored in the fourth script - by eye
myscript<- scripts[4] %>% html_text() %>% trimws()

#Mutliple data strutures are stored, spliting at the ";"
datafields <- strsplit(myscript, ";")
#convert the list to vector
data <- datafields[[1]]
#peek at the data
substr(data, 1, 30)

#remove everything before the first [
data <- sub(".+= (.*)", "\\1", data)

#convert from JSON
answer <- jsonlite::fromJSON(data[1])


dim(answer)
#[1] 476  51

Окончательный фрейм данных имеет 51 столбец и 476 строк информации.

Это сработало отлично, спасибо! Как вы узнали, что нужно изучить элемент сценария?

Anthony Amico 07.07.2024 02:27

Используя инструменты разработчика браузера, я ищу имя в списке. Обычно это отдельный файл или скрипт. Это вопрос опыта и практики.

Dave2e 07.07.2024 03:04

Другие вопросы по теме

Похожие вопросы