我使用pjscrape来抓取大量页面。
我面临的问题是服务器通常会在短暂延迟的一定数量的迭代连接后禁止你。
我发现在页面刮擦与其后续之间产生一些延迟的唯一方法是使用ready函数,即
pjs.addSuite({
// single URL or array
url: urls,
ready: function() {
return $('#MY_LAST_DIV').length > 0;
},
// single function or array, evaluated in the client
scraper: function() {
//...SCRAPING CODE...
}
});
pjscrape超时功能似乎可以解决烦恼问题 (我参考以下内容)
pjs.config({
...
timeoutInterval: 20000,
timeoutLimit: 20000
});
有没有办法在刮痕之间创建间隔?
答案 0 :(得分:3)
查看源代码,目前还没有机制在抓取它们之前等待一段时间 但添加一个并不困难。这是一个原型补丁(未经过测试,只是在这里提出一个想法)
38a39
> delayBetweenRuns: 0,
639c640,642
< s.scrape(url, scrapers, complete);
---
> window.setTimeout(function() {
> s.scrape(url, scrapers, complete);
> },config.delayBetweenRuns);
它只是将setTimout
包装scrape调用,默认情况下定义为0的timout。第一行是添加的配置密钥
答案 1 :(得分:1)
这是一种使用就绪方法
的更为粗俗的方法ready: function() {
if(!window.wait){
window.wait = true;
setTimeout(function(){window.wait = false;}, 3000);
}
return !window.wait;
}