所以我正在研究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循环一次,等待几分钟再运行它(每次都有新的链接,如上所述)。有什么想法吗?
答案 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>
}