В рамках побочного проекта я пытаюсь собрать статистику игроков НФЛ, связанных с фэнтези-футболом. Я нашел URL с нужными мне данными: https://www.cbssports.com/fantasy/football/stats/QB/2020/ytd/stats/ppr/
Я пытаюсь очистить его в R, и мне не повезло. Я пробовал много вещей, самое близкое, что я получил, это:
Test1 <- read_html("https://www.cbssports.com/fantasy/football/stats/QB/2020/season/projections/ppr/") %>% html_nodes('.TableBase-bodyTr')
Вот код, который у меня есть, и вот результат:
Test1
{xml_nodeset (69)}
[1] <tr class = "TableBase-bodyTr">\n<td class = "TableBase-bodyTd \n \n \n \n ">\n <span class = "CellPlayerName--sho ...
[2] <tr class = "TableBase-bodyTr">\n<td class = "TableBase-bodyTd \n \n \n \n ">\n <span class = "CellPlayerName--sho ...
[3] <tr class = "TableBase-bodyTr">\n<td class = "TableBase-bodyTd \n \n \n \n ">\n <span class = "CellPlayerName--sho ...
[4] <tr class = "TableBase-bodyTr">\n<td class = "TableBase-bodyTd \n \n \n \n ">\n <span class = "CellPlayerName--sho ...
Я попытался передать это в html_text() и в результате получил следующее:
[65] "\n \n \n \n \n \n J. Eason\n \n \n \n QB\n \n \n \n IND\n \n \n \n \n \n \n \n
Это просто чистый хаос с встроенной в него соответствующей информацией. Я также пытался использовать html_table() и только что получил ошибку.
Теперь, когда я использую функцию «Просмотр» в «Test1», я могу просмотреть множество слоев данных и найти то, что ищу, но я пытаюсь понять, как напрямую добраться до этих данных.
Я не совсем уверен, куда идти отсюда. Если бы кто-нибудь мог дать мне несколько советов, я бы очень признателен. Мое знакомство с HTML очень низкое, я пытаюсь больше узнать об этом и понять, но из того, что я смог собрать, проверив страницу, было то, что данные хранились внутри класса «TableBase-bodyTr», поэтому я указал узел там.
Есть что-то странное в форматировании таблицы, что вызывает ошибку html_table()
. Не совсем уверен, как это исправить.
Вот альтернатива очистке содержимого строк, а затем созданию фрейма данных.
library(rvest)
page <- read_html("https://www.cbssports.com/fantasy/football/stats/QB/2020/season/projections/ppr/")
#find the rows of the table
rows<-page%>% html_nodes('tr')
#the first 2 rows are the header information skipping those
#get the playname (both short and long verision)
playername <- rows[-c(1, 2)] %>% html_nodes('td span span a') %>% html_text() %>% trimws()
playername <- matrix(playername, ncol=2, byrow=TRUE)
#get the team and position
position <- rows[-c(1, 2)] %>% html_nodes('span.CellPlayerName-position') %>% html_text() %>% trimws()
team <- rows[-c(1, 2)] %>% html_nodes('span.CellPlayerName-team') %>% html_text() %>% trimws()
#get the stats from the table
cols <- rows[-c(1, 2)] %>% html_nodes('td') %>% html_text() %>% trimws()
stats <-matrix(cols, ncol=16, byrow=TRUE)
#make the final answer
answer <- data.frame(playername, position, team, stats[, -1])
#still need to rename the columns
statnames<-c("Name_s", "Name_l", "position", "team", 'GP', 'ATT', 'CMP', 'YDS', 'YDS/G', "TD", 'INT', 'RATE', 'ATT', 'YDS', 'AVG', 'TD', 'FL', 'FPTS', "FPPG")
names(answer) <- statnames
Это даст вам 95% там, я не пытался автоматически получить имена столбцов с веб-страницы. Было проще вручную копировать, вставлять и назначать имена столбцов.
@MSCRN, да, эта страница была непростой, надеюсь, приведенные выше комментарии дают достаточно указаний, чтобы сделать окончательный вывод.
Спасибо! Я просматриваю код, пытаясь понять все это. Поступают все еще какие-то странные данные, нужно изучить их подробнее. Спасибо за ваши усилия, я очень ценю это. HTML действительно сбивает меня с толку, я не уверен, на какой узел смотреть или нет.