我正试图从一个名为RealGM的网站上删除一些NCAA男子篮球数据。我的代码如下:
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不包含表,即,密歇根州2003队的比赛日志没有第4页,而他们2018年队的比赛日志有5页。
不幸的是,当没有找到表时,htmltab返回一个错误,并且中止了我的循环。是否有解决方法,以便它仅跳过这些网址和/或继续执行其余的过程?
答案 0 :(得分:1)
我能够通过首先检查表是否存在来弄清楚该怎么做,如果不存在,请转到循环的下一个迭代:
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)
}
}
}
答案 1 :(得分:0)
一种选择是使用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")
})
}
}
}