2016-08-15 5 views
4

Как я буду запускать RSelenium в параллель.Запуск RSelenium параллельно

Ниже приведен пример использования rvest параллельно

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

У меня есть несколько тысяч URL-адресов, скажем, у меня есть 3 ядра в' registerDoParallel', мне нужно «открыть» 3 экземпляры до 'foreach'? Я не знал о 'seleniumPipes'! thnx –

ответ

2

На каждом узле в кластере начать remoteDriver:

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

Happy to help .. – jdharrison

+0

@jdharrsion: Можно ли открывать несколько вкладок на одном экземпляре Firefox, используя Parallel? Я знаю, что среда во всех параллельных экземплярах различна, но все еще хочу знать, возможно ли это. – Bharath

Смежные вопросы