【问题标题】:delay scrape for few minutes in R for loop在 R for 循环中延迟刮擦几分钟
【发布时间】:2020-10-04 16:03:16
【问题描述】:

我正在尝试抓取一个网站,但它不允许我抓取超过 9 个页面,有什么方法可以在 9 个页面后停止循环并中断一两分钟然后重新开始抓取?

代码如下:

 library(RCurl)
 library(stringr)
 library(XML)

    jt<- c()
for (i in 1:70){
   tryCatch({
    html<- getURL((url[[i]]), followlocation = TRUE)
    doc = htmlParse(html, asText=TRUE)
    new <- xpathSApply(doc, "div/a", 
      xmlValue)
    jt[[i]] <- new},error=function(e){cat("ERROR :",conditionMessage(e), "\n")})}

【问题讨论】:

  • 将 sys.sleep() 函数添加到循环中。该函数将暂停脚本。
  • 可以在迭代次数而不是每次迭代后暂停吗?
  • 在抓取时,您可以做两件事来更好地模拟正常流量:1)将标题设置为非常常见的浏览器(Chrome 很好)。 2) 将Sys.sleep 调用(>= 1 秒,如果随机化更好)添加到 for 循环的每次迭代。您可能会慢一些,但它可能会让您超过 9 页的限制。

标签: r xml sleep rcurl


【解决方案1】:

如果您添加 if(i %% 9 == 0) {Sys.sleep(60)},它将每 9 次迭代暂停 60 秒。 %% 运算符返回将 i 除以 9 的余数,因此如果等于 0,则您已完成 9 次迭代。

【讨论】:

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