【问题标题】:Scrapy export csv without specifying in cmdScrapy导出csv而不在cmd中指定
【发布时间】:2016-08-29 18:45:42
【问题描述】:

我了解如何通过

将我抓取的数据导出为 csv 格式
scrapy crawl <spider_name> -o filename.csv

但是我想从脚本运行我的蜘蛛并自动写入 csv(所以我可以使用调度在特定时间运行蜘蛛)。我怎样才能在我的代码中实现它,它会去哪里?假设可以做到这一点,它会进入管道还是我的实际蜘蛛。

【问题讨论】:

  • “来自脚本”是什么意思?另一个python脚本?批处理文件?

标签: python python-2.7 scrapy scrapy-spider


【解决方案1】:

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

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设置中正确添加这些类名。

【讨论】:

    猜你喜欢
    • 2011-07-11
    • 1970-01-01
    • 2015-10-06
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    相关资源
    最近更新 更多