TryCatch в R - петле webscraping - PullRequest
0 голосов
/ 05 марта 2019

Я использую RSelenium для создания нескольких URL-адресов, чтобы извлечь информацию о цене за эти годы.Моя проблема в том, что некоторые URL-адреса могут не существовать (я сгенерировал URL-адреса за те годы, в которых мне нужна эта информация), и мне нужно пропустить ее и перейти к следующему URL-адресу без остановки.

Я думаю, что tryCatch() помогло бы, но я точно не знаю, как его использовать:

base = "https://www.cochrane.org"
codes_test = list("03040300")
month_ = c("01", "02", "03", "04","05","06","07","08", "09", "10", "11","12")
year_ = c(2008:2019)
html <- apply(expand.grid(base, codes_test, month_, year_), 
              MARGIN = 1, 
              FUN = function(x)paste(x, collapse = "/"))


remDr$navigate("https://www.cochrane.org/0304070017/10/2017")
webElement <- remDr$findElement(value = '//*[@id="acessoAutomatico"]/a')
webElement$clickElement() 

l <-length(html) 

for(j in seq(html)){ 
  sigtap <- foreach(i=1:l) %dopar% {

    tryCatch(stop("no"), error = function(e) cat("Error: ",e$message, "\n")) 
    remDr$navigate(html[i])

    names <- remDr$findElements(value = ' //*[@id="content"]/fieldset[4]/fieldset/table/tbody/tr[2]/td[1]/label | //*[@id="content"]/fieldset[4]/fieldset/table/tbody/tr[1]/td[3]/label | //*[@id="content"]/fieldset[4]/fieldset/table/tbody/tr[2]/td[3]/label | //*[@id="content"]/fieldset[4]/fieldset/table/tbody/tr[3]/td[3]/label ' )

    infos <- remDr$findElements(value = '[@id="valorSA_Total"] | //*[@id="valorSH"] | //*[@id="valorSP"] | //*[@id="totalInternacao"]')

  identificadores <- unlist(lapply(names, function(x) {x$getElementText()}))
  informacoes <- unlist(lapply(infos, function(x) {x$getElementText()}))
  bind_test[[i]] <- data.frame(identificadores , informacoes)

      }}

write.csv(bind_test[[i]], file = paste(bind_test, '.csv', sep = '_'))

Спасибо всем за любую помощь!

1 Ответ

1 голос
/ 05 марта 2019

Предполагая, что remDr$navigate(html[i]) - это то, что выдает ошибку, которую вы хотите отловить, попробуйте следующее:

 success <- tryCatch({
   remDr$navigate(html[i])
   TRUE
   }, 
   warning = function(w) { FALSE },
   error = function(e) { FALSE },
   finally = { })

if (!success) next
...