Как запустить код R в течение заданного времени, а затем остановить его? - PullRequest
2 голосов
/ 11 октября 2019

В настоящее время я работаю над проектом поискового робота с Rselenium, который должен по очереди открывать около 100 000 веб-страниц и собирать информацию:

url <- paste0("www.111", r0[ii],".com")
remDr$open()
remDr$navigate(url)

Кажется, что самая трудоемкая часть этогопроцесс открывает новую веб-страницу, особенно загрузку рекламы, внешних ссылок и т. д. Итак, как я могу запустить этот вид кода R в течение определенного периода времени (например, 2 секунды), а затем остановить его и запустить следующий процесс сбора информации? Спасибо.

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

Понял! Пакет R.utils работает. Кажется, что функцию withTimeout можно использовать вместе с функцией try, чтобы продолжить выполнение любых следующих функций. Например:

library(RSelenium)  
library(rvest)
library(R.utils)

remDr <- remoteDriver(remoteServerAddr = "127.1.1.1" 
                      , port = 4444
                      , browserName = "firefox") # connect to Server
remDr$open()
try(withTimeout(remDr$navigate("https://aaaa.org"), timeout=0.5)) # stop navigation after 0.5 sec
a1 <- read_html(remDr$getPageSource()[[1]][1])
a2 <- html_nodes(a1, "pre") %>% html_text()

Спасибо!

0 голосов
/ 11 октября 2019

Хорошо, я с Timeout из R.utils, кажется, делаю то, что вы хотите (прерывая функцию после задержки).

library(R.utils)
A=2
foo <- function() {
while(A>1){print(A)}
}

#foo()#Ridiculous infinite function don't run it

withTimeout(foo(),timeout=0.5)
...