scrapy csvpipeline根据蜘蛛名称或id导出csv

时间:2017-04-08 03:43:45

标签: python scrapy scrapy-pipeline

我有两只不同的蜘蛛在跑。我正在寻找以蜘蛛名称命名的2个不同的csv文件。 来自 spider1 spider1.csv 数据以及来自 spider2

的数据的 pider2.csv

这是我的 CsvPipeline 类:

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

3 个答案:

答案 0 :(得分:2)

已经有一个内置的Feed导出器。见scrapy docs

简而言之,您只需将这些添加到settings.py:

FEED_URI = 'somename.csv'
FEED_FORMAT = 'csv'

您还可以为每个蜘蛛设置这些设置:

class MySpider(Spider):
    name = 'myspider'
    custom_settings = {'FEED_URI': 'myspider.csv'}

答案 1 :(得分:1)

我会实现以下方法: open_spider(self, spider):

打开蜘蛛时会调用此方法。

参数spider (Spider object) - 已打开的蜘蛛

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

了解更多:scrapy pipeline documentation

答案 2 :(得分:1)

您可以在named parameters设置中使用FEED_URI,这些设置将替换为蜘蛛属性:

FEED_URI = '%(name)s.csv'