Search code examples
pythonscrapyscrapy-pipeline

scrapy csvpipeline to export csv according to spiders name or id


I have two different spiders running. I was looking to write 2 different csv files named after spider name. spider1.csv data from spider1 and spider2.csv for data from spider2

Here's my CsvPipeline class:

class CsvPipeline(object):
def __init__(self):
    self.file = open("ss.csv", 'wb')
    self.exporter = CsvItemExporter(self.file, unicode)
    self.exporter.start_exporting()

def close_spider(self, spider):
    self.exporter.finish_exporting()
    self.file.close()

def process_item(self, item, spider):
    self.exporter.export_item(item)
    del item['crawlid']
    del item['appid']
    return item

Solution

  • I would implement the following methods: open_spider(self, spider):

    This method is called when the spider is opened.

    Parameters: spider (Spider object) – the spider which was opened

    class CsvPipeline(object):
    def __init__(self):
        self.files = {}
    
    def open_spider(self, spider):
        self.file = open("%s.csv" % (spider.name), 'wb')
        self.exporter = CsvItemExporter(self.file, unicode)
        self.exporter.start_exporting()
    
    def close_spider(self, spider):
        self.exporter.finish_exporting()
        self.file.close()
    
    def process_item(self, item, spider):
        self.exporter.export_item(item)
        del item['crawlid']
        del item['appid']
        return item
    

    for more: scrapy pipeline documentation