【问题标题】:Handling htmlParse error (failed to load HTTP resource)处理 htmlParse 错误(未能加载 HTTP 资源)
【发布时间】:2014-02-10 23:55:37
【问题描述】:

我正在尝试对网页进行网页抓取。但是,有时我的循环不起作用,因为解析器“无法加载 HTTP 资源”。问题是页面没有在我的浏览器中加载,所以不是代码问题。

但是,在为我发现错误的每个页面创建异常后,必须重新启动进程是非常烦人的。我想知道是否有办法设置 if 条件。我正在考虑类似的事情:如果发生错误,则在下一步重新启动循环。

我查看了htmlParse的帮助页面,发现有一个错误参数,但不明白如何使用它。对我的 if 条件有什么想法吗?

下面是一个可重现的例子:

if(require(RCurl) == F) install.packages('RCurl')
if(require(XML) == F) install.packages('XML')
if(require(seqinr) == F) install.packages('seqinr')

for  (i in 575:585){
    currentPage <- i  # define pagina inicial da busca
# Link que ser? procurado

link <- paste("http://www.cnj.jus.br/improbidade_adm/visualizar_condenacao.php?seq_condenacao=",
             currentPage,
             sep='')

doc <- htmlParse(link, encoding = "UTF-8") #this will preserve characters
    tables <- readHTMLTable(doc, stringsAsFactors = FALSE)
    if(length(tables) != 0) {
    tabela2 <- as.data.frame(tables[10])

    tabela2[,1]  <- gsub( "\\n", " ", tabela2[,1] )
    tabela2[,2]  <- gsub( "\\n", " ", tabela2[,2] )
    tabela2[,2]  <- gsub( "\\t", " ", tabela2[,2] )

    listofTabelas[[i]] <- tabela2

  tabela1 <- do.call("rbind", listofTabelas)
  names(tabela1) <- c("Variaveis", "status")

    }
}

【问题讨论】:

    标签: r html-parser


    【解决方案1】:

    使用httr 包可能会更好。

    library(httr)
    library(XML)
    
    url <- "http://www.cnj.jus.br/improbidade_adm/visualizar_condenacao.php"
    for  (i in 575:585){
      response<- GET(url,path="/",query=c(seq_condenacao=as.character(i)))
      if (response$status_code!=200){ # HTTP request failed!!
        # do some stuff...
        print(paste("Failure:",i,"Status:",response$status_code))
        next
      }
      doc <- htmlParse(response, encoding = "UTF-8")
      # do some other stuff
      print(paste("Success:",i,"Status:",response$status_code))
    }
    # [1] "Success: 575 Status: 200"
    # [1] "Success: 576 Status: 200"
    # [1] "Success: 577 Status: 200"
    # [1] "Success: 578 Status: 200"
    # [1] "Success: 579 Status: 200"
    # [1] "Success: 580 Status: 200"
    # [1] "Success: 581 Status: 200"
    # [1] "Success: 582 Status: 200"
    # [1] "Success: 583 Status: 200"
    # [1] "Success: 584 Status: 200"
    # [1] "Success: 585 Status: 200"
    

    【讨论】:

    • doc 中的 z 是什么
    • 对不起,应该是htmlParse(response,...)。答案已被编辑。
    猜你喜欢
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    相关资源
    最近更新 更多