未在cmd中指定的Scrapy导出csv

zbwhf8kr  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(181)

我知道如何通过以下方式将我收集的数据导出为csv格式

scrapy crawl <spider_name> -o filename.csv

然而,我想从脚本运行我的蜘蛛,并自动写入csv(这样我就可以使用调度在特定时间运行蜘蛛)。我如何在我的代码中实现这一点?它会去哪里?也就是说,它会进入管道或我的实际蜘蛛假设这可以做到。

csbfibhn

csbfibhn1#

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

xriantvc

xriantvc2#

您可以在www.example.com中将scrapy的FEED_URI设置设置settings.py为要保存数据的文件。

FEED_URI = '*filename*.csv'

您还可以在spider文件中设置自定义设置,

custom_settings = {
     'FEED_URI': filename_{datetime.datetime.today().strftime("%Y-%b-%d")}.csv',
     'FEED_FORMAT': 'csv',
     'FEED_EXPORT_ENCODING': 'utf-8',
 }

相关问题