r - 为什么经过一些迭代(在 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>"
解决方案
您在同一个 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
}
或者也许改变你的用户代理......
推荐阅读
- unity3d - 跳跃时重力不影响玩家
- javascript - Firefox WebRTC 发出 DOMException 无法解析 SDP
- r - 在循环中创建多个 ancovas
- c++ - Emscripten:提供下载/保存生成的 MEMFS 文件
- highcharts - 如何消除高图区域样条图中的边距差距?
- amazon-web-services - AWS AutoScaling CoolDown 组件
- python-3.x - 如何将请求模块中的文件和表单参数传递给requests.request()?
- javascript - 从数组派生无序列表
- php - 如何在注册时将特定电子邮件域列入白名单
- ios - 将 NSSortDescriptor 与多个键和缺失数据一起使用