R- Исключая случайные числа, которые уже были сгенерированы

Итак, я работаю над сценарием веб-скриптинга в R, и поскольку конкретный веб-сайт, который я собираю, не слишком любезен для людей, которые обрабатывают свои данные в больших объемах, я сломал цикл, чтобы обрабатывать только 10 ссылок одновременно., Я все еще хочу просмотреть все ссылки, однако, просто случайным и медленным способом.

productLink # A list of all the links that I'll be scraping
 x<- length(productLink)  
 randomNum <- sample(1:x, 10)
library(rvest)

for(i in 1:10){
url <- productLink[randomNum[i]]
specs <- url %>%
  html() %>%
  html_nodes("h5") %>%
  html_text()
specs

message<- "\n                Temporarily unavailable\n            "

if(specs == message){
  print("Item unavailable")
}
else{
  print("Item available")
}


}

Теперь в следующий раз, когда я запускаю этот цикл for, я хочу исключить все случайные пронумерованные индексы, которые уже были опробованы при предыдущем запуске цикла. Таким образом, цикл for проходит 10 новых ссылок каждый раз, пока все ссылки не будут использованы. В этом есть еще один аспект, который я хотел бы получить. Так как я могу поднять сигнальные флаги, перебирая грубой силой сайт конкретной компании, могу ли я как-то замедлить этот цикл, чтобы он запускался только каждые пару минут? Я имею в виду функцию тайм-аута или такую, где код запускает цикл for один раз, ждет несколько минут, затем запускает его снова (с новыми ссылками каждый раз, как упоминалось выше). Есть идеи?

1 ответ

Решение

Используйте что-то вроде этого. Зацикливайтесь на всем индексе продукта случайным образом.

for (i in sample(1:x)){
  <Your code here>
  # Sleep for 120 seconds
  Sys.sleep(120)
}

И если вы хотите сделать 10 одновременно. Сон в течение 120 секунд каждые 10 казней.

n = 1
for (i in sample(1:x)){
  # Sleep for 120 seconds every 10 runs
  if (n == 10) {Sys.sleep(120); n = 0}
  n = n+1
  <Your code here>
}
Другие вопросы по тегам