为什么readLines(来自url)结果在经过一些迭代(在R中)后发生变化?

时间:2018-12-22 13:55:03

标签: r for-loop url readlines

我的问题是,在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>"

1 个答案:

答案 0 :(得分:0)

您多次调用相同的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
}

或者更改您的用户代理...