私は多くの異なるドメインから並行してページをダウンロードするためにscrapyを使用しています。私はダウンロードするページ数が何十万もありますので、パフォーマンスは重要です。治療のダウンロード速度を改善するにはどうすればよいですか?
残念ながら、私はスクレイピーのスピードをプロファイリングしているので、1秒に数ページしか得られません。実際、平均で約2ページ/秒です。私は以前に自分のマルチスレッドのスパイダーを書いて、毎秒何百ものページを処理していました。私は、スクラピーのねじれなどが似たような魔法を使うことができると確信しました。
スピードアップをスピードアップするにはどうすればよいですか?私はフレームワークが本当に好きですが、このパフォーマンスの問題は私のためのディール・ブレーカーになる可能性があります。
ここにsettings.pyファイルの関連部分があります。私が逃した重要な設定はありますか?
LOG_ENABLED = False
CONCURRENT_REQUESTS = 100
CONCURRENT_REQUESTS_PER_IP = 8
いくつかのパラメータ:
- scrapyバージョン0.14
- プロジェクトを使用するにはEC2の大インスタンスにデプロイされているので、メモリ、CPU、およびと遊ぶために十分な帯域幅があるはずです。
- 私はJSONプロトコルを使用してクロールをスケジュールしています。クローラには、同時に数十回の同時クロールがあります。
- 私が最初に言ったように、私は多くのサイトからページをダウンロードしているので、リモートサーバーのパフォーマンスとCONCURRENT_REQUESTS_PER_IPを心配するべきではありません。
- 現在のところ、私は後処理をほとんどやっていません。 xpathはありません。正規表現はありません。私はちょうど各ページのためのURLといくつかの基本的な統計情報を保存しています。 (私は基本性能のねじれが働い得ればこれは後に変更されます。)
治療はもっと速くなります。 CPUにバインドされているか、アイドル状態になっていますか?最初から遅いですか、パフォーマンスが低下しますか? –
これは最初から遅いです。 AWSはマシンが100%CPUで動作していることを示していますが、ねじれたリアクトルが常にそうしていると思います。 SSHコマンド、新しいHTTPリクエストなどにはまだマシンがうまく対応しています。 – Abe
この1時間ほど作業していますが、scrapydのサービス設定ファイルに問題があります。私は、スクラップデーモンの再起動に関する別の質問を開始しました:http://stackoverflow.com/questions/12428143/how-do-i-restart-the-scrapyd-daemon – Abe