我知道这不是一个好主意,但每个程序员都希望了解更多。 现在我一直在尝试网络抓取。第一次创建脚本并运行它会阻止我的IP地址。我错了,因为在我的脚本中我向网站发送了太多的请求,这样就会花费大量的网站流量并让他们认为我是一个入侵者, 我想出了这个想法来延迟我的请求,我如何使我的循环等待功能完成? 我不想使用这样的东西。这将每5秒执行一次
(function(links){
setTimeout(function() { scrapeAnotherLink(links); }, delay);
})(result[val]);
delay += 5000;
我想等待我的ajax请求完成从提供的链接中删除然后等待5秒然后再次执行。
我的代码。
刮掉链接。 //只是一个样本
$('#scrape').click(function() {
$.ajax({
type: 'get',
url: 'scrape.php',
data:{Param:1},
dataType: 'json',
cache: false,
success: function(result) {
for(var val in result) {
link = result[val];
scrapeAnotherLink(link);
}
},
});
});
function scrapeAnotherLink(link){
//Some ajax here
setTimeout(function() {
output_log(link);
}, 5000);
}
function output_log(str){
$('#output').append(str+'<br/>');
}
我读到一些scrappers池IP地址,但我不知道如何
答案 0 :(得分:0)
这样的事情可以胜任这项工作。而不是使用循环进行递归调用,将在前一个ajax请求结束时执行。下面的代码有一些假设,但它传达了这个想法。
function executeAjax() {
$.ajax({
type: 'get',
url: 'scrape.php',
data:{Param:1},
dataType: 'json',
cache: false,
success: function(links) {
scrapeAnotherLink(links, 0);
}
});
}
function scrapeAnotherLink(links, index){
//Some ajax here
function executeCall(){
$.ajax({
url : links[index],
success : function(str) {
output_log(str);
scrapeAnotherLink(links, ++index);
}
});
}
setTimeout(executeCall, 5000);
}
function output_log(str){
$('#output').append(str+'<br/>');
}