2

Web サイトからページのリストをダウンロードするスクリプトを作成しました。時々、次のエラーが表示されます (秒数は可変です)。

bwshare モジュールは、次の 7 秒間、リクエストを拒否します。データのダウンロードが速すぎます。

ループで sleep(2) を使用すると、はるかにうまく機能することがわかりましたが、時間遅延が高すぎます。このモジュールを処理する最良の方法は何ですか? 遅滞なくスクレイピングする必要がありますか?応答が上記のメッセージのようになる場合は、要求された秒数だけスリープを使用しますか?

4

2 に答える 2

1

それはすべて、エラーメッセージの前に取得できるページ数によって異なります。

平均して何ページを取得できるか試してみてください。

bwshareメッセージの4ページ前が最小です。

4ページのダウンロードに達する にエラーメッセージが表示される場合は、ダウンロードするたびにilの方がスリープ(2)するのが速くなります。

于 2012-05-25T12:22:39.647 に答える
0

この方法を試してください...それはあなたを助けるかもしれません。

  $requestTime = 0.1; // s/connection

    foreach(/* blah */) {
        $start = microtime(true);
        // Do your stuff to here.. get_file_content($url) and other processing .........

        if($timeTaken = microtime(true)-$start < $requestTime) {
            usleep(($requestTime-$timeTaken)*1000000);
        }
    }

問題が解決した場合は、回答を投稿して、他の人にも役立つようにしてください

于 2012-06-18T13:33:48.587 に答える