これは遅すぎる答えです。しかし、私は午後と夕方、アイテムのパイプラインとフィードのエクスポートの違いを理解しようとして過ごしましたが、これは十分に文書化されていません。そして、それはまだ混乱している人に役立つと思います。
TL; DR:
FeedExportは、アイテムをファイルとしてエクスポートするように設計されています。データベースストレージにはまったく適していません。
フィードのエクスポートは、scrapyinの拡張機能として実装されていscrapy.extensions.feedexportます。このように、scrapyの他の拡張機能と同様に、いくつかのscrapyシグナル(、、および)へのレジスタコールバック関数によって順番に実装されるopen_spiderためclose_spider、item_scrapedアイテムを格納するために必要な手順を実行できます。
の場合open_spider、FeedExporter(実際の拡張クラス)はフィードストレージとアイテムエクスポーターを初期化します。具体的な手順は、通常はから一時ファイルであるファイルのようなオブジェクトを取得し、FeedStroageそれをに渡すことItemExporterです。の場合item_scraped、FeedExporter事前に初期化されたItemExporterオブジェクトをに呼び出すだけexport_itemです。の場合close_spider、前のオブジェクトのメソッドをFeedExporter呼び出して、ファイルをファイルシステムに書き込み、リモートFTPサーバーにアップロードし、S3ストレージにアップロードします。storeFeedStorage
組み込みのアイテムエクスポーターとストレージのコレクションがあります。しかし、上記のテキストからお気づきかもしれませんが、これFeedExporterは設計上、ファイルストレージと緊密に結合されています。データベースを使用する場合、アイテムを保存する通常の方法は、アイテムがスクレイプされるとすぐにデータベースに挿入することです(または、いくつかのバッファーが必要になる場合があります)。
したがって、データベースストレージを使用する適切な方法は、独自のを作成することであるように思われますFeedExporter。スクレイプシグナルへのコールバックを登録することでそれを達成できます。ただし、アイテムパイプラインの使用はより簡単であり、そのような実装の詳細を認識する必要がないため、必須ではありません。