Параллельное скребание Rselenium с петлей foreach
Моя цель - удалить сайт http://plovila.pomorstvo.hr/ с помощью RSelenium.
Как видите, есть поле "NIB", в которое я могу ввести какое-то число, и оно вернет вывод, если что-то существует для этого числа. Вы можете попробовать, выбрав "Brodica" в первом поле и номер 100 000 в поле "NIB".
У меня есть код Rselenium, который очищает этот веб-сайт, вводя номера NIB и затем удаляя все соответствующие данные (вы также можете нажать "Детальджи" для получения дополнительных данных).
Я хотел бы удалить все данные для номера NIB от 100 000 до 300 000. Но потребуется около 30 дней, чтобы ввести и удалить все номера. Моя идея состоит в том, чтобы запустить один и тот же сайт на 7 разных ядрах и дать каждому ядру (сеансу) отбросить часть номеров NIB (разделить задачу). Мой код выглядит так:
library(XML)
library(RCurl)
library(RSelenium)
library(png)
library(imager)
library(RMySQL)
library(htmltab)
library(jsonlite)
library(rvest)
library(foreach)
library(doParallel)
library(magrittr)
(cl <- (detectCores() - 1) %>% makeCluster) %>% registerDoParallel
clusterEvalQ(cl, {
library(RSelenium)
library(seleniumPipes)
remDr <- remoteDriver(remoteServerAddr = "192.168.99.100", port = 4445L,
browserName = "chrome")
remDr$open()
})
Здесь у меня первая проблема. Если я добавлю одно выражение additioanl в clusterEvalQ
clusterEvalQ(cl, {
library(RSelenium)
library(seleniumPipes)
remDr <- remoteDriver(remoteServerAddr = "192.168.99.100", port = 4445L,
browserName = "chrome")
remDr$open()
remDr$navigate("http://plovila.pomorstvo.hr/")
})
возвращает ошибку:
Error in checkForRemoteErrors(lapply(cl, recvResult)) :
3 nodes produced errors; first error: Summary: UnknownError
Detail: An unknown server-side error occurred while processing the command.
class: org.openqa.selenium.WebDriverException
Further Details: run errorDetails method
Позже я хотел бы дать каждому узлу часть лома чисел NIB. Woild это работа:
ws <- foreach(x = (NIB_begin:NIB_end), .combine = 'rbind',
.packages = c("rvest", "magrittr", "RSelenium", "jsonlite", "htmltab", "XML", "RCurl", "foreach")) %dopar% {
# do something
}