2012-09-14 9 views
5

私は多くの異なるドメインから並行してページをダウンロードするために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といくつかの基本的な統計情報を保存しています。 (私は基本性能のねじれが働い得ればこれは後に変更されます。)
+0

治療はもっと速くなります。 CPUにバインドされているか、アイドル状態になっていますか?最初から遅いですか、パフォーマンスが低下しますか? –

+0

これは最初から遅いです。 AWSはマシンが100%CPUで動作していることを示していますが、ねじれたリアクトルが常にそうしていると思います。 SSHコマンド、新しいHTTPリクエストなどにはまだマシンがうまく対応しています。 – Abe

+1

この1時間ほど作業していますが、scrapydのサービス設定ファイルに問題があります。私は、スクラップデーモンの再起動に関する別の質問を開始しました:http://stackoverflow.com/questions/12428143/how-do-i-restart-the-scrapyd-daemon – Abe

答えて

9

私は...過去に そして、私は「ダーティ」古いトリッキーで解決それの大部分を、この問題を抱えていました。

Do a local cache DNS

多くの場合、この高いCPU使用率で同時にリモートサイトにアクセスすると、治療がURLを解決しようとしているためです。

また、ホスト(/etc/resolv.conf)のDNS設定をLOCALキャッシングDNSサーバーに変更することを忘れないでください。

最初のものは遅くなりますが、すぐにキャッシュが開始され、より効率的な解決策が得られます。

私はこれがあなたの問題に役立つことを願っています!

+0

素晴らしい答え!!!! – KJW

+3

[scrapy doc](http://doc.scrapy.org/en/latest/topics/settings.html#dnscache-enabled)によると、デフォルトでは 'DNSCACHE_ENABLED'は' True'です。 – AliBZ

関連する問題