2016-05-02 7 views
0

私は大規模なサイトを掻き集める必要があります。各カテゴリの記事は約10カテゴリと数千(実際にはどれくらいかわかりません)です。最も簡単なアプローチは、カテゴリごとにスパイダーを作成し、さらなる抽出のために次の記事リンクごとにyieldの回答を作成することです。多数のリクエストのための治療パターン

私が考えているのは、記事のURLをカテゴリからキューに抽出するトップレベルのスパイダーを作ることです。第2レベル(記事)のスパイダーはキューから一定数のURL(たとえば100)を受け取る必要があり、スパイダーが終了するともう1つのスパイダーが開始されます。このようにして、a)いくつかのスパイダーを制御することができます。たとえば、b)一定数の記事を数えるオプションがあります。b)スパイダーのメモリ使用量が制限されています。以前のプロジェクトでも同様の結果が得られました。

これは意味をなさないか、1つのスパイダーからできるだけ多くのリクエストを発しても問題ありませんが、正常に動作しますか?

答えて

1

可能な限り多くのリクエストを1つのスパイダーから発射することができます。

これは、scrapyはすべての要求を一度に処理しないため、すべてがキューに入れられているためです。

CONCURRENT_REQUESTSで処理する要求の数を変更することができます。これは、高すぎると(100など)実際にメモリ使用の問題を引き起こす可能性があります。 scrapyジョブはデフォルトでジョブごとに512MBのメモリを設定します。

+0

これはメモリの問題を取り除きますが、私はまだバッチでそれらを持つことを好みます。これは 'spider_idle'を使って次のバッチを起動することで実現できます – VladimirLenin