私はscrapyを使用して、さまざまなドメインから並行してページをダウンロードしています。ダウンロードするページは数十万ページあるので、パフォーマンスが重要です。
残念ながら、scrapyの速度をプロファイリングしたので、1秒あたり数ページしか取得できません。実際、平均して1秒あたり約2ページです。私は以前、毎秒数百ページを実行するために独自のマルチスレッドスパイダーを作成しました。スクラピーズのツイストなどの使用は、同様の魔法を使用できると確信していました。
スクレイプをスピードアップするにはどうすればよいですか?私はフレームワークが本当に好きですが、このパフォーマンスの問題は私にとって大きな問題になる可能性があります。
これがsettings.pyファイルの関連部分です。私が見逃した重要な設定はありますか?
LOG_ENABLED = False
CONCURRENT_REQUESTS = 100
CONCURRENT_REQUESTS_PER_IP = 8
いくつかのパラメーター:
- スクレイプバージョン0.14を使用
- プロジェクトはEC2ラージインスタンスにデプロイされるため、十分なメモリ、CPU、帯域幅を使用できる必要があります。
- JSONプロトコルを使用してクロールをスケジュールし、クローラーに常に数十の同時クロールを追加し続けます。
- 最初に言ったように、私は多くのサイトからページをダウンロードしているので、リモートサーバーのパフォーマンスとCONCURRENT_REQUESTS_PER_IPは心配する必要はありません。
- 今のところ、後処理はほとんど行っていません。xpathなし。正規表現なし。各ページのURLといくつかの基本的な統計を保存しているだけです。(これは、基本的なパフォーマンスの問題が解決されたら、後で変更されます。)