次のように、コマンドラインからアイテムをcsvファイルにエクスポートしようとしました。
scrapy crawl spiderName -o filename.csv
私の質問は:コードで同じことをする最も簡単な解決策は何ですか?別のファイルからファイル名を抽出するので、これが必要です。最後のシナリオは、私が呼び出すことです
scrapy crawl spiderName
そして、アイテムをfilename.csvに書き込みます
アイテムパイプラインを使用しないのはなぜですか?
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/feed-exports.html
スクレイパーを実装するときに最も頻繁に必要とされる機能の1つは、スクレイピングされたデータを適切に保存できることです。これは、他のシステムで使用されるスクレイピングされたデータを含む「エクスポートファイル」(一般に「エクスポートフィード」と呼ばれる)を生成することを意味します。
Scrapyはこの機能をそのまま使用できるFeed Exportsを提供します。これにより、複数のシリアル化形式とストレージバックエンドを使用して、スクレイピングされたアイテムを含むフィードを生成できます。