最近写爬虫程序时,首先获得了url的list列表,然后循环list去调用获取对应url的内容,因为在很短时间内频繁访问某网站存在一定的问题,所以需要在循环里面每间隔2s左右再去调用该方法。具体的实现方式记录如下:
之前的错误写法:
for(var i = 0;i<articleList.length;i++){
setTimeOut(ArticelDetail.getAticleDetail(articleList[i].contentId)
,2000);
}
上面的写法中只会调用一次中间的函数,所以将循环用递归代替,改进后的方法如下:
//用递归代替循环每隔2S调用一次详细信息爬取事件
var i=0;
function getDetail() {
i++;
if(i<articleList.length){
setTimeout(function(){
ArticelDetail.getAticleDetail(articleList[i].contentId);
getDetail();
},2000);
}
}
getDetail();
这样便可以实现每隔2S调用获取详情的方法,并且在该递归调用完成后才进行下一步操作。