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>
}