我有两只不同的蜘蛛在跑。我正在寻找以蜘蛛名称命名的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
答案 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
答案 2 :(得分:1)
您可以在named parameters设置中使用FEED_URI,这些设置将替换为蜘蛛属性:
FEED_URI = '%(name)s.csv'