Я знаю из вашего описания, что вы работаете с несколькими пауками. Просто чтобы подтвердить: вы обрабатываете их одновременно ? (в пределах тот же процесс сканирования )?
В соответствии с кодом, которым вы поделились. Вы пытаетесь сохранить один объект выходного файла для каждого паука, но пишете по одному и тому же пути. В spider_opened
:
file = open('result_extract.csv', 'w+b')
self.files[spider] = file
Это считается основной причиной проблемы.
Поскольку у вас есть только один файл (как в вашей файловой системе) для записи, вы можете сделать это, открыв его только один раз. Модифицированная версия вашего кода:
class ScrapybotPipeline(object):
def __init__(self):
self.file = 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):
self.file = open('result_extract.csv', 'w+b')
self.exporter = CsvItemExporter(self.file)
self.exporter.fields_to_export = ['ean', 'price', 'desc', 'company']
self.exporter.start_exporting()
def spider_closed(self, spider):
self.exporter.finish_exporting()
self.file.close()
def process_item(self, item, spider):
self.exporter.export_item(item)
return item