2016-07-08 18 views
0

rvestforeachdoParallelと並行して使用している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')) 
} 

私は(多分間違って)パラレルバックエンドのせいであると推測しましたが、私は他のアプリケーションで前にそれを何度も使ってきたし、問題を見つけるように見えることはできません。

+0

- あなたのIPはあなたがあまりにも多くの同時のためにスクレーピングしているサイトが禁止されて取得しないように注意してください:のようなforeachにライブラリをロードしてみてくださいリクエスト。それはたくさん起こります。 –

答えて

0

Rの複数のインスタンスを使用して各ページを試してみると、それらのすべてがを使用するためにはrvestパッケージが必要になることがあります。これは良い質問が、同時に単なる警告である

# read html for each TMK 
tmkhtml <- foreach(i = seq_along(tmklist)) %dopar% { 
library(rvest) 
    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=')) 
} 
関連する問題