1

我正在使用 pjscrape 来抓取大量页面。

我面临的问题是,服务器通常会在经过一定数量的迭代连接并在短时间内阻止您。

我发现在页面抓取与其后续之间创建一些延迟的唯一方法是使用准备功能,即

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
});

有没有办法在刮擦之间建立间隔?

4

2 回答 2

3

查看源代码,目前没有机制可以在抓取它们之前等待一段时间但是添加一个应该不难。这是一个原型补丁(未经测试,只是在这里给出一个想法)

38a39
>             delayBetweenRuns: 0,
639c640,642
<                             s.scrape(url, scrapers, complete);
---
>                             window.setTimeout(function() {
>                                 s.scrape(url, scrapers, complete);
>                             },config.delayBetweenRuns);

它只是简单地setTimout使用默认定义为 0 的 timout 来包装 scrape 调用。第一行是添加的配置键

于 2013-01-09T15:38:37.597 回答
1

这是一个更hackier的方法,它使用了 ready 方法

ready: function() {
        if(!window.wait){
            window.wait = true;
            setTimeout(function(){window.wait = false;}, 3000);
    }
        return !window.wait;
    }
于 2013-10-24T13:05:26.840 回答