web-dev-qa-db-ja.com

(コマンドライン経由ではなく)スクレイピーからcsvファイルをエクスポートする

次のように、コマンドラインからアイテムをcsvファイルにエクスポートしようとしました。

   scrapy crawl spiderName -o filename.csv

私の質問は:コードで同じことをする最も簡単な解決策は何ですか?別のファイルからファイル名を抽出するので、これが必要です。最後のシナリオは、私が呼び出すことです

  scrapy crawl spiderName

そして、アイテムをfilename.csvに書き込みます

19
Chris

アイテムパイプラインを使用しないのはなぜですか?

WriteToCsv.py

   import csv
   from YOUR_PROJECT_NAME_HERE import settings

   def write_to_csv(item):
       writer = csv.writer(open(settings.csv_file_path, 'a'), lineterminator='\n')
       writer.writerow([item[key] for key in item.keys()])

   class WriteToCsv(object):
        def process_item(self, item, spider):
            write_to_csv(item)
            return item

settings.py

   ITEM_PIPELINES = { 'project.pipelines_path.WriteToCsv.WriteToCsv' : A_NUMBER_HIGHER_THAN_ALL_OTHER_PIPELINES}
   csv_file_path = PATH_TO_CSV

アイテムを個別のスパイダー用の個別のcsvに書き込む場合は、スパイダーにCSV_PATHフィールドを指定できます。次に、パイプラインで、setttigsからのパスの代わりにスパイダーフィールドを使用します。

これは私が自分のプロジェクトでテストした作品です。

HTH

http://doc.scrapy.org/en/latest/topics/item-pipeline.html

16
rocktheartsm4l

それがフィードのエクスポートの目的です: http://doc.scrapy.org/en/latest/topics/feed-exports.html

スクレイパーを実装するときに最も頻繁に必要とされる機能の1つは、スクレイピングされたデータを適切に保存できることです。これは、他のシステムで使用されるスクレイピングされたデータを含む「エクスポートファイル」(一般に「エクスポートフィード」と呼ばれる)を生成することを意味します。

Scrapyはこの機能をそのまま使用できるFeed Exportsを提供します。これにより、複数のシリアル化形式とストレージバックエンドを使用して、スクレイピングされたアイテムを含むフィードを生成できます。

1