R-排除已经生成的随机数

时间:2015-06-23 19:01:22

标签: r for-loop web-scraping random-sample

所以我正在研究R中的webscraping脚本,因为我正在抓取的特定网站对于那些大量删除数据的人并不太友好,我已经打破了我的循环只处理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 个答案:

答案 0 :(得分:1)

使用类似的东西。随机循环所有产品索引。

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

如果你想一次做10个。每10次执行就会睡120秒。

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