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

时间:2014-08-06 14:28:30

标签: python csv scrapy export-to-csv scrapy-spider

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

   scrapy crawl spiderName -o filename.csv

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

  scrapy crawl spiderName

并将项目写入filename.csv

3 个答案:

答案 0 :(得分:15)

为什么不使用项目管道?

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字段。然后在你的管道中使用你的蜘蛛场而不是来自定居点的路径。

这项工作我在我的项目中进行了测试。

HTH

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

答案 1 :(得分:1)

Feed Exports的用途: http://doc.scrapy.org/en/latest/topics/feed-exports.html

  

实施抓取工具时最常需要的功能之一是能够正确存储抓取的数据,而且通常,这意味着生成一个“导出文件”,其中包含要使用的抓取数据(通常称为“导出Feed”)通过其他系统。

     

Scrapy通过Feed Exports提供此功能,允许您使用多个序列化格式和存储后端生成带有已删除项目的Feed。

答案 2 :(得分:0)

最新答案是:

使用内置导出器。您可以将文件名设置为密钥。 Config可能看起来像:

filename = 'export' 
class mySpider(scrapy.Spider):
  custom_settings = {
    'FEEDS': {
      f'{filename}.csv': {
        'format': 'csv',
        'overwrite': True
      }
    }
  }

文档:https://docs.scrapy.org/en/latest/topics/feed-exports.html#std-setting-FEEDS