0
rvest
をforeach
とdoParallel
と並行して使用しているWebページから値を削り取ろうとしています。具体的には、ウェブサイトからプロパティの国勢調査番号を取得するためにTMKという不動産プロパティ識別子を使用しています。以下のサンプルコードで複数のhtmlページを並行して読み込む
なく%dopar%
と、%do%
で実行すると、foreach
ループは、所望の結果(管番号を含むベクター)を得ます。
require(rvest); require(foreach); require(doParallel)
registerDoParallel(cores = 4)
# sample input values used to generate html
tmklist <- c(91136088, 73006073, 92023027, 45061064)
# read html for each TMK
# DOES NOT PRODUCE DESIRED RESULT WHEN USED WITH %dopar%
tmkhtml <- foreach(i = seq_along(tmklist)) %do% {
read_html(paste0(paste0('http://gis.hicentral.com/pubwebsite/TMKDetails.aspx?tmk=', tmklist[[i]]),'&lyrLst=0|0|0|0|0|0|0|0|0|0|0|0|0|13|0|15|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|lblsaerial2008&unit=0000&address='))
}
# scrape census tract number from html page
# loop returns vector of chr(0) if %dopar% used instead of %do%
tract.num <- list()
for(i in 1:length(tmkhtml)){
tract.num[[i]] <- html_text(html_nodes(tmkhtml[[i]], '#lblTrackNumber'))
}
私は(多分間違って)パラレルバックエンドのせいであると推測しましたが、私は他のアプリケーションで前にそれを何度も使ってきたし、問題を見つけるように見えることはできません。
- あなたのIPはあなたがあまりにも多くの同時のためにスクレーピングしているサイトが禁止されて取得しないように注意してください:のような
foreach
にライブラリをロードしてみてくださいリクエスト。それはたくさん起こります。 –