htmltab“未找到表”解决方法?

时间:2019-05-30 12:39:33

标签: r

我正试图从一个名为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返回一个错误,并且中止了我的循环。是否有解决方法,以便它仅跳过这些网址和/或继续执行其余的过程?

2 个答案:

答案 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")
        })
       }
     }
 }