Почему результат readLines (из URL) изменяется после нескольких итераций (в R)? - PullRequest
0 голосов
/ 22 декабря 2018

Моя проблема в том, что после некоторых итераций в 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 голосов
/ 22 декабря 2018

Вы слишком часто звоните по одному и тому же 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
}

Или, возможно, изменение вашего пользовательского агента ...

...