Параллельное скребание 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 

}

0 ответов

Другие вопросы по тегам