从scrapy导出csv文件(不是通过命令行)

Chr*_*ris 19 python csv scrapy export-to-csv scrapy-spider

我成功地尝试从命令行将我的项目导出到csv文件中,如:

   scrapy crawl spiderName -o filename.csv
Run Code Online (Sandbox Code Playgroud)

我的问题是:在代码中执行相同操作的最简单的解决方案是什么?我需要这个,因为我从另一个文件中提取文件名.最后的情景应该是,我打电话

  scrapy crawl spiderName
Run Code Online (Sandbox Code Playgroud)

它将项目写入filename.csv

roc*_*m4l 17

为什么不使用物品管道?

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
Run Code Online (Sandbox Code Playgroud)

settings.py

   ITEM_PIPELINES = { 'project.pipelines_path.WriteToCsv.WriteToCsv' : A_NUMBER_HIGHER_THAN_ALL_OTHER_PIPELINES}
   csv_file_path = PATH_TO_CSV
Run Code Online (Sandbox Code Playgroud)

如果您希望将项目写入单独的蜘蛛单独的csv,您可以为您的蜘蛛提供CSV_PATH字段.然后在您的管道中使用您的蜘蛛字段而不是来自设置的路径.

这项工作我在我的项目中测试过.

HTH

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

  • Scrapy的文档提到使用Feed导出可以更好地写入文件,如@Arthur在下面的答案中所提到的.下面是Scrapy的文档片段 - "JsonWriterPipeline的目的只是为了介绍如何编写项目管道.如果你真的想所有物品刮存储到一个JSON文件,你应该使用饲料的出口." (2认同)