首页 > 解决方案 > 为什么经过一些迭代(在 R 中)后,readLines(来自 url)结果会发生变化?

问题描述

我的问题是,在 R 中的一些迭代之后,readLines() 函数不再提取所需的信息。而且我不知道这个问题来自哪里。

我想从 www.whoscored.com 抓取一些球员统计数据并循环访问这些球员 --> https://www.whoscored.com/Players/i

for (i in 1:20){
 sc_act <- readLines("https://www.whoscored.com/Players/101537", warn = FALSE)
    if (i == 1){
      sc <- sc_act
      j <- 0
    }
    if (sc == sc_act){
      j <- j + 1
    }
}

在第一次迭代中,结果按预期出现,它将提到的 url 的源代码读入 sc_act。但随后(大约 10 次迭代后)结果如下所示:

"<html style=\"height:100%\"><head><META NAME=\"ROBOTS\" CONTENT=\"NOINDEX, NOFOLLOW\"><meta name=\"format-detection\" content=\"telephone=no\"><meta name=\"viewport\" content=\"initial-scale=1.0\"><meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\"><script type=\"text/javascript\" src=\"/_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3\"></script></head><body style=\"margin:0px;height:100%\"><iframe src=\"/_Incapsula_Resource?SWUDNSAI=28&xinfo=9-5358627-0%200NNN%20RT%281545484419406%2074%29%20q%280%20-1%20-1%20-1%29%20r%280%20-1%29%20B12%2811%2c55645%2c0%29%20U2&incident_id=287001440012879521-35322777428756745&edet=12&cinfo=0b000000\" frameborder=0 width=\"100%\" height=\"100%\" marginheight=\"0px\" marginwidth=\"0px\">Request unsuccessful. Incapsula incident ID: 287001440012879521-35322777428756745</iframe></body></html>"

标签: rfor-loopurlreadlines

解决方案


您在同一个 url 上调用的次数太多了,我建议您阅读“使用 R 进行自动化数据收集”一书。解决问题的一种简单方法是在迭代之间等待几秒钟。

for (i in 1:20){
 sc_act <- readLines("https://www.whoscored.com/Players/101537", warn = FALSE)
    if (i == 1){
      sc <- sc_act
      j <- 0
    }
    if (sc == sc_act){
      j <- j + 1
    }
time <- runif(n = 1, 3, 5)
Sys.sleep(time) # Wait between 3 and 5 seconds each iteration
}

或者也许改变你的用户代理......


推荐阅读