Как включить интервал для предотвращения ошибки «слишком много запросов» в цикле for (+ 2 второстепенных вопроса)? - PullRequest
0 голосов
/ 10 апреля 2019

Я в настоящее время на стадии подготовки данных моей магистерской диссертации, и я столкнулся с проблемой. Я пытаюсь очистить сайт, используя цикл for и пакет rvest в RStudio, основанный на векторе с ~ 90k ID. Как добавить временной интервал в цикл for для предотвращения HTML - ошибка слишком большого количества запросов?

У меня также есть две незначительные проблемы со стороны, с которыми мне нужна помощь:

  1. Если я использую только вектор из 10 идентификаторов для проверки цикла, цикл продолжает перезаписывать результат, так что наблюдения 1-9 перезаписываются и отображаются только наблюдения 10.

  2. Я могу успешно очистить один элемент (имя), но код не работает, когда я пытаюсь очистить второй элемент и добавить его в другой столбец.

Я какое-то время возился с кодом, поэтому у меня уже было много его итераций, и это единственная версия, с которой мне пришлось работать. Для перезаписи наблюдений я попытался добавить [i] после «playernames», но это выдает ошибку «новые столбцы оставят дыры после существующих столбцов».

# playerid is a vector of ~90k different IDs. (wouldn't work as a list)
# I successfully manage to scrape the first name of the player, although it keeps overwriting the observation.

for(i in playerid){
  websiteX <- paste("http://www.X.com/id=",i, sep="")
  websiteX <- read_html(websiteX)
  playernames <- data.frame(first =websiteX %>% html_node("dd:nth-child(2)") %>% html_text() ,
                            stringsAsFactors=FALSE)
  playernames$playerid <- i
}

# I want to also scrape the surname using: sur =websiteX %>% html_node(websiteX, "dd:nth-child(4)") %>% html_text() ,

Короче говоря, мне нужен фрейм данных с идентификаторами игроков 90k, за которым следует столбец для первого имени и столбец для второго имени.

То, что я получаю, это ошибка перегрузки HTML, если я использую весь набор идентификаторов 90k и пытаюсь только очистить имя. Если я только соскребу несколько имен (скажем, 10), это продолжит переписывать наблюдение.

Я не нашел способа реализовать очистку фамилии, и я не понимаю, как добавить интервал времени для предотвращения ошибки перегрузки.

# Changing 
playernames <- data.frame~... 
# to 
playernames[i] <- data.frame~... 
# produces the new columns would leave holes after existing columns error.
...