解析失败时的htmlParse循环重试值

时间:2015-07-12 06:52:10

标签: xml r loops web-scraping

如何在循环中重试我的值?

我正在解析html并且每隔一段时间,当我尝试绑定来自另一个数据帧的行时,解析将不会抓取整个表,导致代码中的错误。我有另一个变量,它具有我可以检查的实际行数。

我的想法是

for(thisURL in URLs){

  for (l in 1:10) {
    b <- htmlParse(thisURL)
    tableNode <- xpathSApply(batting, '//*[@id="logs"]')[[1]]
    data <- readHTMLTable(tableNode, stringsAsFactors = FALSE)
    gid <- xpathSApply(b, '//*[contains(@id, "logs.")]/td[12]/span/@id')

    if length(data[[1]]) == length(gid) then exit this loop continue with the original loop else retry the htmlParse

  }

  remainder of first for loop

}

我是R的新人,如果长度相等,我不知道如何退出循环。我很确定如果我使用next,它将转到1:10循环中的下一个值,而不是第一个循环。如果有更好的方法,请提出建议。谢谢你的帮助!!

1 个答案:

答案 0 :(得分:0)

我无法分辨索引l在1:10循环中的作用。看起来你想要一个while语句。这样的事可能吗?

for(thisURL in URLs){

  # These assignments get the while loop started
  data <- NULL 
  gid <- NA

  # Number of retries and initial l
  l.max <- 10  
  l <- 0

  # This will run as long as the lengths are unequal for at most l.max times 
  while (length(data[[1]]) != length(gid) & l < l.max) {
    l <- l+1
    tableNode <- xpathSApply(batting, '//*[@id="logs"]')[[1]]
    data <- readHTMLTable(tableNode, stringsAsFactors = FALSE)
    gid <- xpathSApply(b, '//*[contains(@id, "logs.")]/td[12]/span/@id')
  }

  remainder of first for loop

}