リストに 100,000 を超える URL (異なるドメイン) があり、それをダウンロードしてデータベースに保存し、さらに処理したりいじったりします。
Pythonのマルチプロセッシング/マルチスレッドの代わりにスクレイピーを使用するのが賢明でしょうか? はいの場合、同じことを行うスタンドアロン スクリプトを作成するにはどうすればよいですか?
また、心に浮かぶ他の素晴らしいアプローチを自由に提案してください。
リストに 100,000 を超える URL (異なるドメイン) があり、それをダウンロードしてデータベースに保存し、さらに処理したりいじったりします。
Pythonのマルチプロセッシング/マルチスレッドの代わりにスクレイピーを使用するのが賢明でしょうか? はいの場合、同じことを行うスタンドアロン スクリプトを作成するにはどうすればよいですか?
また、心に浮かぶ他の素晴らしいアプローチを自由に提案してください。
Scrapy はまだオプションです。
スピード/パフォーマンス/効率
Scrapy は、人気のある Python のイベント駆動型ネットワーク フレームワークである Twisted で作成されています。したがって、並行性のために非ブロッキング (別名非同期) コードを使用して実装されます。
データベースのパイプライン
データをデータベースにパイプライン処理したいとおっしゃっていましたが、ご存知かもしれませんが、Scrapy には次のようItem Pipelines
な機能があります。
アイテムがスパイダーによってスクレイピングされた後、アイテム パイプラインに送信され、順次実行されるいくつかのコンポーネントを介して処理されます。
そのため、各ページは、ダウンロード後すぐにデータベースに書き込むことができます。
コード編成
Scrapy は、設定、スパイダー、アイテム、パイプラインなどが論理的に分離された、素晴らしく明確なプロジェクト構造を提供します。それでも、コードがより明確になり、サポートと理解が容易になります。
コーディングの時間
Scrapy は、舞台裏で多くの作業を行います。これにより、実際のコードとロジック自体に集中し、「金属」部分 (プロセスやスレッドなどの作成) について考える必要がなくなります。
しかし同時に、Scrapy はオーバーヘッドになる可能性があります。Scrapy は、Web ページからデータをクロールしてスクレイピングするように設計されている (そして優れている) ことを思い出してください。たくさんのページを調べずにダウンロードしたいだけなら、はい、grequests
良い代替手段です。