我有一个从 ~ 440 个网页中读取 HTML 表格数据的循环。每个页面上的代码并不完全相同,所以有时我需要表节点 1,有时我需要节点 2。现在我只是在列表中手动设置节点号并将其输入循环。我的问题是页面节点已经开始改变并且更新节点#列表变得很麻烦。
如果循环遇到错误的节点#(即:1 而不是 2,或者相反),它会给出错误并关闭。有没有办法让循环在遇到错误时将错误的节点号替换为正确的节点号,然后继续运行循环,就好像什么都没发生一样?
这是我循环中代码的 readHTML 部分,带有示例 url:
url <- "http://espn.go.com/nba/player/gamelog/_/id/2991280/year/2013/"
html.page <- htmlParse(url)
tableNodes <- getNodeSet(html.page, "//table")
x <- as.numeric(Players$Nodes[s])
tbl = readHTMLTable(tableNodes[[x]], colClasses = c("character"),stringsAsFactors = FALSE)
这是我在节点 # 错误时得到的错误:
"readHTMLTable(tableNodes[[x]], colClasses = c("character"), stringsAsFactors = FALSE) 中的错误:在为函数 'readHTMLTable' 选择方法时评估参数 'doc' 时出错:tableNodes [[x] 中的错误]] : 下标越界"
示例代码:
A <- c("dog", "cat")
Nodes <- as.data.frame(1:1)
#)Nodes <- as.data.frame(1:2) <-- This works without errors
colnames(Nodes)[1] <- "Col1"
Nodes2 <- 2
url <-c("http://espn.go.com/nba/player/gamelog/_/id/6639/year/2013/","http://espn.go.com/nba/player/gamelog/_/id/6630/year/2013/")
for (i in 1:length(A))
{
html.page <- htmlParse(url[i])
tableNodes <- getNodeSet(html.page, "//table")
x <- as.numeric(Nodes$Col1[i])
df = readHTMLTable(tableNodes[[x]], colClasses = c("character"),stringsAsFactors = FALSE)
#tryCatch(df) here.....no clue
assign(paste0("", A[i]), df)
}