これは遅すぎる答えです。しかし、私は午後と夕方、アイテムのパイプラインとフィードのエクスポートの違いを理解しようとして過ごしましたが、これは十分に文書化されていません。そして、それはまだ混乱している人に役立つと思います。
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ストレージにアップロードします。store
FeedStorage
組み込みのアイテムエクスポーターとストレージのコレクションがあります。しかし、上記のテキストからお気づきかもしれませんが、これFeedExporter
は設計上、ファイルストレージと緊密に結合されています。データベースを使用する場合、アイテムを保存する通常の方法は、アイテムがスクレイプされるとすぐにデータベースに挿入することです(または、いくつかのバッファーが必要になる場合があります)。
したがって、データベースストレージを使用する適切な方法は、独自のを作成することであるように思われますFeedExporter
。スクレイプシグナルへのコールバックを登録することでそれを達成できます。ただし、アイテムパイプラインの使用はより簡単であり、そのような実装の詳細を認識する必要がないため、必須ではありません。