2016-08-15 6 views
4

どうすれば並列でRSeleniumを実行することができますか?並行してRSeleniumを実行する

以下がremoteDriverを開始クラスタ内の各ノードに平行

library(RSelenium) 
library(rvest) 
library(magrittr) 
library(foreach) 
library(doParallel) 

URLsPar <- c("http://www.example.com/", "http://s5.tinypic.com/n392s6_th.jpg", "http://s5.tinypic.com/jl1jex_th.jpg", 
     "http://s6.tinypic.com/16abj1s_th.jpg", "http://s6.tinypic.com/2ymvpqa_th.jpg") 

(detectCores() - 1) %>% makeCluster %>% registerDoParallel 

ws <- foreach(x = 1:length(URLsPar), .packages = c("rvest", "magrittr", "RSelenium")) %dopar% { 
     URLsPar[x] %>% read_html %>% as("character")} 

stopImplicitCluster() 
+1

オープン 'open'方法を使用して、インスタンスごとに、別のブラウザ'remoteDriver'クラスです。あなたのワークフローの面では 'seleniumPipes'が適切かもしれませんhttps://github.com/johndharrison/seleniumPipes – jdharrison

+0

私は' registerDoParallel'に3つのコアがあり、 'open'する必要があります3つのURLを持っています3 'foreach'の前のインスタンス?私は 'seleniumPipes'について知らなかった! thnx –

答えて

2

rvestを用いた例である。

library(RSelenium) 
library(rvest) 
library(magrittr) 
library(foreach) 
library(doParallel) 

URLsPar <- c("http://www.bbc.com/", "http://www.cnn.com", "http://www.google.com", 
      "http://www.yahoo.com", "http://www.twitter.com") 
appHTML <- c() 
# start a Selenium Server 
selServ <- startServer() 

(cl <- (detectCores() - 1) %>% makeCluster) %>% registerDoParallel 
# open a remoteDriver for each node on the cluster 
clusterEvalQ(cl, { 
    library(RSelenium) 
    remDr <- remoteDriver() 
    remDr$open() 
}) 
myTitles <- c() 
ws <- foreach(x = 1:length(URLsPar), .packages = c("rvest", "magrittr", "RSelenium")) %dopar% { 
    remDr$navigate(URLsPar[x]) 
    remDr$getTitle()[[1]] 
} 

# close browser on each node 
clusterEvalQ(cl, { 
    remDr$close() 
}) 

stopImplicitCluster() 
# stop Selenium Server 
selServ$stop() 

> ws 
[[1]] 
[1] "BBC - Homepage" 

[[2]] 
[1] "CNN - Breaking News, U.S., World, Weather, Entertainment & Video News" 

[[3]] 
[1] "Google" 

[[4]] 
[1] "Yahoo" 

[[5]] 
[1] "Welcome to Twitter - Login or Sign up" 
+0

大変感謝して、もう一度感謝! –

+0

ハッピーに役立つ.. – jdharrison

+0

@jdharrsion:Parallelを使用して、単一のFirefoxインスタンスで複数のタブを開くことは可能ですか?私は、環境はすべての並列インスタンスでは異なることを認識していますが、それが可能かどうかをまだ知りたいです – Bharath

関連する問題