【问题标题】:How to run an R code within a given duration and then stop it?如何在给定的时间内运行 R 代码然后停止它?
【发布时间】:2019-10-11 07:19:18
【问题描述】:

目前我正在使用 Rselenium 做一个网络爬虫项目,需要依次打开大约 100,000 个网页并进行信息收集:

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

似乎这个过程中最耗时的部分是打开一个新网页,尤其是加载广告、外部链接等。那么我怎么能在特定的持续时间(例如 2 秒)内运行这种 R 代码和然后停止它,并运行以下信息收集过程?谢谢。

【问题讨论】:

  • 不清楚要停止什么?如果没有完成,您是否只想在 2 秒后停止一个功能?或者您是否运行多个函数并希望在 2 秒后停止函数列表,并在新 url 上启动新的函数列表?
  • 我想在运行后(并在 2 秒后停止)remDr$navigate(url) 继续运行以下功能,例如 content &lt;- read_html(remDr$getPageSource()[[1]][1]) %&gt;% html_nodes("#aaa") %&gt;% html_text()。 remDr$navigate(url) 函数是唯一一个如果没有完成,我想在 2 秒后停止的函数。

标签: r rselenium


【解决方案1】:

好的,我 withTimeout 来自 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)

【讨论】:

    【解决方案2】:

    知道了! 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()
    
    

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      相关资源
      最近更新 更多