1

〜 440 の Web ページから HTML テーブル データを読み取るループがあります。各ページのコードはまったく同じではないため、テーブル ノード 1 が必要な場合とノード 2 が必要な場合があります。現在、ノード番号を手動でリストに設定し、それをループに入れています。私の問題は、ページ ノードが変更され始め、ノード # リストの更新が面倒になってきていることです。

ループが間違ったノード番号 (つまり、2 ではなく 1、またはその逆) に遭遇すると、エラーが発生してシャットダウンします。エラーが発生した場合にループでエラーのあるノード番号を正しい番号に置き換え、何も起こらなかったかのようにループを実行し続ける方法はありますか?

ループ内のコードの 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")、stringAsFactors = 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)
}
4

1 に答える 1

3

エラー メッセージが表示された場合は、確実に値subscript out of boundsを下げxてください。tryCatch元の質問に投稿したデモ コードに基づいた一般的なデモ(ただし、とが何であるかわからないため、 に置き換えxました):2Playerss

> msg <- tryCatch(readHTMLTable(tableNodes[[2]], colClasses = c("character"),stringsAsFactors = FALSE), error = function(e)e)
> str(msg)
List of 2
 $ message: chr "error in evaluating the argument 'doc' in selecting a method for function 'readHTMLTable': Error in tableNodes[[2]] : subscript"| __truncated__
 $ call   : language readHTMLTable(tableNodes[[2]], colClasses = c("character"), stringsAsFactors = FALSE)
 - attr(*, "class")= chr [1:3] "simpleError" "error" "condition"
> msg$message
[1] "error in evaluating the argument 'doc' in selecting a method for function 'readHTMLTable': Error in tableNodes[[2]] : subscript out of bounds\n"
> grepl('subscript out of bounds', msg$message)
[1] TRUE
于 2013-11-03T18:08:18.450 に答える