7

これはscrapyについての質問です。

アイテムをデータベースに保存する場合、フィードエクスポートメカニズムではなくパイプラインを介して実装するのが一般的であるのはなぜですか?

フィードのエクスポート-さまざまな形式とストレージを使用して、スクレイピングされたデータを出力します

スクレイパーを実装するときに最も頻繁に必要とされる機能の1つは、スクレイピングされたデータを適切に保存できることです。

アイテムパイプライン-スクレイピングされたデータを後処理して保存します

アイテムパイプラインの一般的な用途は...スクレイピングされたアイテムをデータベースに保存することです

違いは何ですか、2つの長所/短所、そして(なぜ)パイプラインがより適していますか?

どうも

4

3 に答える 3

8

これは遅すぎる答えです。しかし、私は午後と夕方、アイテムのパイプラインフィードのエクスポートの違いを理解しようとして過ごしましたが、これは十分に文書化されていません。そして、それはまだ混乱している人に役立つと思います。

TL; DR: FeedExportは、アイテムをファイルとしてエクスポートするように設計されています。データベースストレージにはまったく適していません。

フィードのエクスポートは、scrapyinの拡張機能として実装されていscrapy.extensions.feedexportます。このように、scrapyの他の拡張機能と同様に、いくつかのscrapyシグナル(、、および)へのレジスタコールバック関数によって順番に実装されるopen_spiderためclose_spideritem_scrapedアイテムを格納するために必要な手順を実行できます。

の場合open_spiderFeedExporter(実際の拡張クラス)はフィードストレージとアイテムエクスポーターを初期化します。具体的な手順は、通常はから一時ファイルであるファイルのようなオブジェクトを取得し、FeedStroageそれをに渡すことItemExporterです。の場合item_scrapedFeedExporter事前に初期化されたItemExporterオブジェクトをに呼び出すだけexport_itemです。の場合close_spider、前のオブジェクトのメソッドをFeedExporter呼び出して、ファイルをファイルシステムに書き込み、リモートFTPサーバーにアップロードし、S3ストレージにアップロードします。storeFeedStorage

組み込みのアイテムエクスポーターとストレージのコレクションがあります。しかし、上記のテキストからお気づきかもしれませんが、これFeedExporterは設計上、ファイルストレージと緊密に結合されています。データベースを使用する場合、アイテムを保存する通常の方法は、アイテムがスクレイプされるとすぐにデータベースに挿入することです(または、いくつかのバッファーが必要になる場合があります)。

したがって、データベースストレージを使用する適切な方法は、独自のを作成することであるように思われますFeedExporter。スクレイプシグナルへのコールバックを登録することでそれを達成できます。ただし、アイテムパイプラインの使用はより簡単であり、そのような実装の詳細を認識する必要がないため、必須ではありません。

于 2018-04-28T16:19:29.030 に答える
3

私が理解する限りでは:

パイプラインは普遍的なソリューションです-db接続を確立し、db構造を知っており、重複をチェックします-削り取られたアイテムを保存するすべてのプロセスを制御できます。

エクスポーターは、スクレイピングされたデータを保存するための事前定義された方法です。引用

急いでいて、アイテムエクスポーターを使用してスクレイピングされたデータを出力したい場合は、フィードのエクスポートを参照してください。

于 2012-04-18T10:19:59.753 に答える
0

デフォルトの形式を使用できる場合は、フィードのエクスポートが便利です。カスタム形式が必要な場合は、カスタムエクスポーターを作成する必要があります。これは、単にデータをパイプラインに保存するよりも手間がかかります。

于 2012-04-18T09:43:17.773 に答える