1

RのXMLパッケージとRCurlパッケージを使用して、Webサイトからデータを取得します。スクリプトは6,000,000ページをスクラップする必要があるため、ループを作成しました。

for (page in c(1:6000000)){

 my_url = paste('http://webpage.....')
 page1 <- getURL(my_url, encoding="UTF-8")
 mydata <- htmlParse(page1, asText=TRUE, encoding="UTF-8")
 title <- xpathSApply(mydata, '//head/title', xmlValue, simplify = TRUE, encoding="UTF-8")

.....
.....
.....}

ただし、数回ループすると、次のエラーメッセージが表示されます。

curlPerformのエラー(curl = curl、.opts = opts、.encoding = .encoding):接続タイムアウト

問題は、「タイムアウト」がどのように機能するかを理解していないことです。プロセスが700ページ後に終了する場合もあれば、1000、1200ページなどの後に終了する場合もあります。ステップは安定していません。接続がタイムアウトすると、ラップトップからこのWebページに15分間アクセスできなくなります。コマンドを使用して、1000ページが廃棄されるごとにプロセスを15分間遅らせることを考えました

if(page==1000) Sys.sleep(901)

、しかし何も変わっていません。

何がうまくいかず、これをどのように克服するかについてのアイデアはありますか?

4

2 に答える 2

2

curlコマンドを使用して、Rでネイティブインストールを呼び出すことができますSystem()。このようにして、などでcurl現在サポートされていないすべてのオプションにアクセスできます。このオプションを使用すると、発行されたクエリは、失敗するたびにさらに長い時間繰り返し再試行されます。つまり、最初の失敗から1秒後、2回目の失敗から2秒後、3回目の失敗から4秒というように再試行します。その他の時間制御オプションは、cURLサイトhttp://curl.haxx.se/docs/manpage.htmlでも利用できます。RCurl--retry <num>--retry <num>curl

于 2012-11-26T22:53:52.503 に答える
1

私はそれを解決しました。Sys.sleep(1)各反復に追加されました。

于 2011-11-05T10:43:00.750 に答える