5

リストに 100,000 を超える URL (異なるドメイン) があり、それをダウンロードしてデータベースに保存し、さらに処理したりいじったりします。

Pythonのマルチプロセッシング/マルチスレッドの代わりにスクレイピーを使用するのが賢明でしょうか? はいの場合、同じことを行うスタンドアロン スクリプトを作成するにはどうすればよいですか?

また、心に浮かぶ他の素晴らしいアプローチを自由に提案してください。

4

4 に答える 4

2

取得する URL がよくわかっている場合、Scrapy はここでは関係ないようです (ここではクロールは行われません)。

頭に浮かぶ最も簡単な方法は、を使用することRequestsです。ただし、各 URL を順番にクエリし、ブロックして応答を待つのは効率的ではないためGRequests、リクエストのバッチを非同期で送信することを検討できます。

于 2013-06-06T08:48:59.967 に答える
0

Scrapy はまだオプションです。

  1. スピード/パフォーマンス/効率

    Scrapy は、人気のある Python のイベント駆動型ネットワーク フレームワークである Twisted で作成されています。したがって、並行性のために非ブロッキング (別名非同期) コードを使用して実装されます。

  2. データベースのパイプライン

    データをデータベースにパイプライン処理したいとおっしゃっていましたが、ご存知かもしれませんが、Scrapy には次のようItem Pipelinesな機能があります。

    アイテムがスパイダーによってスクレイピングされた後、アイテム パイプラインに送信され、順次実行されるいくつかのコンポーネントを介して処理されます。

    そのため、各ページは、ダウンロード後すぐにデータベースに書き込むことができます。

  3. コード編成

    Scrapy は、設定、スパイダー、アイテム、パイプラインなどが論理的に分離された、素晴らしく明確なプロジェクト構造を提供します。それでも、コードがより明確になり、サポートと理解が容易になります。

  4. コーディングの時間

    Scrapy は、舞台裏で多くの作業を行います。これにより、実際のコードとロジック自体に集中し、「金属」部分 (プロセスやスレッドなどの作成) について考える必要がなくなります。

しかし同時に、Scrapy はオーバーヘッドになる可能性があります。Scrapy は、Web ページからデータをクロールしてスクレイピングするように設計されている (そして優れている) ことを思い出してください。たくさんのページを調べずにダウンロードしたいだけなら、はい、grequests良い代替手段です。

于 2013-06-06T12:05:59.480 に答える