Я пытаюсь собрать некоторые (много) данные о мужском баскетболе NCAA с веб-сайта RealGM. Мой код находится ниже:
library(htmltab)
tables <- list()
for (i in 0:1548) {
for (j in 0:16) {
for (k in 0:4) {
a <- i+1
b <- 2003+j
c <- k+1
url <- paste("https://basketball.realgm.com/ncaa/conferences/Big-Ten-Conference/2/Michigan/",a,"/individual-games/",b,"/minutes/Season/desc/",c,sep = "")
tables[[paste(i,j,k,sep = "")]] <- htmltab(url,rm_nodata_cols = F,which = 1)
}
}
}
Я использовал аналогичные методы в прошлом, чтобы получать данные с таких сайтов, как Sports Reference, которые хранят данные об игроках в таблицах.
В этом цикле переменная a управляет командой, b — годом, а c — номером страницы набора игровых журналов.
Моя проблема заключается в том, что некоторые из указанных URL-адресов не содержат таблиц, то есть нет 4-й страницы игровых журналов для команды Мичигана 2003 года, но есть 5 страниц для их команды 2018 года.
К сожалению, htmltab возвращает ошибку, когда таблица не найдена, и мой цикл прерывается. Есть ли обходной путь для этого, чтобы он просто пропустил эти URL-адреса и/или продолжил остальную часть процесса?
Один из вариантов — использовать tryCatch
и пропускать URL-адреса, которые выдают ошибку.
library(htmltab)
tables <- list()
for (i in 1:1549) {
for (j in 2003:2019) {
for (k in 1:5) {
url <- paste0("https://basketball.realgm.com/ncaa/conferences/Big-Ten-Conference/2/Michigan/",i,"/individual-games/",j,"/minutes/Season/desc/",k)
tables[[paste0(i,j,k)]] <- tryCatch({
htmltab(url,rm_nodata_cols = F,which = 1)
}, error = function(e) {
cat("Wrong URL : ", url, " skipping\n")
})
}
}
}
Я смог выяснить, как это сделать, сначала проверив, существует ли таблица, а если нет, то перешел к следующей итерации цикла:
library(htmltab)
tables <- list()
for (i in 0:1548) {
for (j in 0:16) {
for (k in 0:4) {
a <- i+1
b <- 2003+j
c <- k+1
url <- paste("https://basketball.realgm.com/ncaa/conferences/Big-Ten-Conference/2/Michigan/",a,"/individual-games/",b,"/minutes/Season/desc/",c,sep = "")
test <- html_nodes(read_html(url),"table")
if (length(test) == 0){
next
}
tables[[paste(i,j,k,sep = "")]] <- htmltab(url,rm_nodata_cols = F,which = 1)
}
}
}
Спасибо! Я просмотрел tryCatch, но у меня возникли проблемы с синтаксисом. Ценить это!