Scrapy导出csv而不在cmd中指定

时间:2016-08-29 18:45:42

标签: python python-2.7 scrapy scrapy-spider

我了解如何通过

将我的已删除数据导出为csv格式
{{1}}

但是我想从脚本运行我的蜘蛛并自动写入csv(所以我可以使用计划在特定时间运行蜘蛛)。我怎么能在我的代码中实现它,它会去哪里?如果可以这样做的话,它会进入管道或我的实际蜘蛛。

1 个答案:

答案 0 :(得分:1)

Scrapy使用管道对您抓取的数据进行后期处理。你可以创建 一个名为pipelines.py的文件,其中包含以下导出的代码 您的数据放入文件夹exports。这是我在其中一个中使用的一些代码 pip项目

from scrapy import signals
from scrapy.contrib.exporter import CsvItemExporter, JsonItemExporter

class ExportData(object):
    def __init__(self):
        self.files = {}
        self.exporter = None

    @classmethod
    def from_crawler(cls, crawler):
        pipeline = cls()
        crawler.signals.connect(pipeline.spider_opened, signals.spider_opened)
        crawler.signals.connect(pipeline.spider_closed, signals.spider_closed)
        return pipeline

    def spider_opened(self, spider):
        raise NotImplementedError

    def spider_closed(self, spider):
        self.exporter.finish_exporting()
        file_to_save = self.files.pop(spider)
        file_to_save.close()

    def process_item(self, item, spider):
        self.exporter.export_item(item)
        return item

class ExportJSON(ExportData):
    """
    Exporting to export/json/spider-name.json file
    """
    def spider_opened(self, spider):
        file_to_save = open('exports/%s.json' % spider.name, 'w+b')
        self.files[spider] = file_to_save
        self.exporter = JsonItemExporter(file_to_save)
        self.exporter.start_exporting()

class ExportCSV(ExportData):
    """
    Exporting to export/csv/spider-name.csv file
    """
    def spider_opened(self, spider):
        file_to_save = open('exports/%s.csv' % spider.name, 'w+b')
        self.files[spider] = file_to_save
        self.exporter = CsvItemExporter(file_to_save)
        self.exporter.start_exporting()

您可以在github上查看项目代码。您只需要在scrapy设置中正确添加这些类名。