Я пытаюсь очистить таблицу со следующей веб-страницы, используя R:
При проверке веб-страницы я вижу в 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)
Любая помощь будет принята с благодарностью!
Веб-страница использует 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 строк информации.
Используя инструменты разработчика браузера, я ищу имя в списке. Обычно это отдельный файл или скрипт. Это вопрос опыта и практики.
Это сработало отлично, спасибо! Как вы узнали, что нужно изучить элемент сценария?