1

多数のページをスクレイプするために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タイムアウト関数はpotherの問題を処理しているようです(私は以下を参照します)

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でスクレイプコールをラッピングするだけです。最初の行は、追加された構成キーです

于 2013-01-09T15:38:37.597 に答える
1

これは、readyメソッドを使用するはるかにハッキーなアプローチです

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