如果我想抓一个网站让我们每隔一到五分钟自主地说一次,我怎么能多次调用请求函数?我正在使用do-while循环,但它不会等待代码在再次运行之前完成,它只是跳过所有内容。
do{
request('http://www.google.com', function(err, resp, html){
if(!err && resp.statusCode == 200){
var $ = cheerio.load(html);
url = $('b')[0].children[0].data
urls.push(url)
console.log(url);
fs.writeFile("test.txt",urls,function(err) {
if (err) {
return console.log(err)
}
console.log("The file was saved!");
})
}
});
}while (counter == 0)
答案 0 :(得分:1)
要简单解决您遇到的问题,您应该查看setInterval,而不是尝试在minutes
对象的Date
上使用模数。
类似的东西:
setInterval(scrape, 1000 * 60); //1000ms = 1 second. 1 second * 60 = 1 minute
如果在名为scrape
的函数中包含您的请求逻辑,将起作用。
如果你想构建一个更复杂的工具,你可以查看另一个答案中的链接,否则这应该让你解锁。
希望这有帮助!
答案 1 :(得分:0)
节点是异步的。这就是为什么你看到它跳过循环中的所有东西,而不是把你的实现放在一个循环中我会建议你检查一些非常着名的节点模块,这些模块旨在跨越这些实现,并使你很容易设计你的代码以非常漂亮的“异步”方式,如async或Q,如果您是Javascript承诺的粉丝,而不是回调。
此外,如果你想废弃网页,有很多scraping modules可能对你的情况有用。