scrapy csvpipeline 根据蜘蛛名称或 ID 导出 csv
scrapy csvpipeline to export csv according to spiders name or id
我有两个不同的蜘蛛运行。我正在寻找以蜘蛛名称命名的 2 个不同的 csv 文件。
spider1.csv 数据来自 spider1 和 spider2.csv 数据来自 蜘蛛2
这是我的 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
我将实现以下方法:
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 docs
简而言之,您只需将这些添加到您的 settings.py:
FEED_URI = 'somename.csv'
FEED_FORMAT = 'csv'
您还可以为每个蜘蛛设置这些设置:
class MySpider(Spider):
name = 'myspider'
custom_settings = {'FEED_URI': 'myspider.csv'}
可以使用named parameters in a FEED_URI设置,替换为spider属性:
FEED_URI = '%(name)s.csv'
在最近的 scrapy 版本中,FEED_URI
和 FEED_FORMAT
设置已被弃用,取而代之的是 FEEDS
设置。
那么,什么可以定义为(如 的回答中所述):
FEED_URI = '%(name)s.csv'
FEED_FORMAT = 'csv'
现在应该定义为:
FEEDS = {
'%(name)s.csv': {
'format': 'csv',
}
}
我认为这比覆盖每个蜘蛛的提要 uri 或实现自定义管道来执行提要导出器已经做的事情更优雅。
(希望这对可能发现此问题但使用较新的 scrapy 版本的任何人有所帮助。)
我有两个不同的蜘蛛运行。我正在寻找以蜘蛛名称命名的 2 个不同的 csv 文件。 spider1.csv 数据来自 spider1 和 spider2.csv 数据来自 蜘蛛2
这是我的 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
我将实现以下方法:
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 docs
简而言之,您只需将这些添加到您的 settings.py:
FEED_URI = 'somename.csv'
FEED_FORMAT = 'csv'
您还可以为每个蜘蛛设置这些设置:
class MySpider(Spider):
name = 'myspider'
custom_settings = {'FEED_URI': 'myspider.csv'}
可以使用named parameters in a FEED_URI设置,替换为spider属性:
FEED_URI = '%(name)s.csv'
在最近的 scrapy 版本中,FEED_URI
和 FEED_FORMAT
设置已被弃用,取而代之的是 FEEDS
设置。
那么,什么可以定义为(如
FEED_URI = '%(name)s.csv'
FEED_FORMAT = 'csv'
现在应该定义为:
FEEDS = {
'%(name)s.csv': {
'format': 'csv',
}
}
我认为这比覆盖每个蜘蛛的提要 uri 或实现自定义管道来执行提要导出器已经做的事情更优雅。
(希望这对可能发现此问题但使用较新的 scrapy 版本的任何人有所帮助。)