次のようなRスクリプトがあります。
id <- "25731"
url_name <- "Cross_Ange:_Tenshi_to_Ryuu_no_Rondo"
library(rvest)
html_content <- html(paste("http://myanimelist.net/anime/", id, "/", url_name, "/stats", sep=""))
test_page <- html_node(html_content, "div")
そのtest_page
変数は、ページが正しく読み込まれたかどうかを確認するためのものです。問題は、そうでない場合があることです。html_content
変数には、次のような奇妙な HTML コンテンツが含まれることがあります。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html style="height:100%">
<head>
<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
</head>
<body style="margin:0px;height:100%"><iframe src="/_Incapsula_Resource?CWUDNSAI=9&xinfo=6-12427765-0%200NNN%20RT(1427731440619%201)%20q(0%20-1%20-1%20-1)%20r(0%20-1)%20B12(4,315,0)&incident_id=124002150019133827-71376390758075766&edet=12&cinfo=04000000" frameborder="0" width="100%" height="100%" marginheight="0px" marginwidth="0px">Request unsuccessful. Incapsula incident ID: 124002150019133827-71376390758075766</iframe></body>
</html>
それは間違った HTML コンテンツです。そして、それは間違った内容でさえ一貫していません。時々、別の間違ったページが返されます。
Firefox で HTTP リクエストを送信しようとすると、最初の試行で期待どおりに正しい HTML が返されるため、URL 自体は正しいです。
奇妙なことに、html()
関数を使用して行を数回実行しようとすると、最終的には何も変更せずに正しい HTML ページが読み込まれます。RScript で実行を自動化しようとすると、奇妙なことに一貫性がなくなります。
HTML が正しく読み込まれたかどうかを確認する while ループを設定しましたが (div
を使用してタグが見つかった場合html_node()
)、RScript はエラーをスローしますが、RStudio は問題なく実行します。
Error in as.vector(x, "list") :
cannot coerce type 'environment' to vector of type 'list'
Calls: html_node ... <Anonymous> -> lapply -> as.list -> as.list.default
Execution halted
要約すると、RStudio には一貫性のないhtml()
関数があり、奇妙なページを返すことがありますが、その行を繰り返し実行して強制的に通過できれば、最終的には機能します。しかし、RScript をそのまま使用するとエラーがスローされます。
R バージョン 3.1.3 (2015-03-09) -- 「滑らかな歩道」