繁体   English   中英

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

[英]Export csv file from scrapy (not via command line)

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

   scrapy crawl spiderName -o filename.csv

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

  scrapy crawl spiderName

并将项目写入 filename.csv

为什么不使用项目管道?

写入Csv.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

设置.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

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

实现抓取器时最常需要的功能之一是能够正确存储抓取的数据,这通常意味着生成带有抓取数据的“导出文件”(通常称为“导出源”)以供其他系统使用.

Scrapy 通过 Feed Exports 提供了开箱即用的此功能,它允许您使用多种序列化格式和存储后端生成带有抓取项目的提要。

最新的答案是:

使用内置导出器。 您可以将文件名设置为键。 配置可能如下所示:

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

有一种使用“FEEDS”将文件保存在scrapy中的更新方法

class mySpider(scrapy.Spider):
    name = "myProject"
    custom_settings = {
    "FEEDS":{"fileName.csv":{"format":"csv"}},
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM