Вы можете использовать scrapy pipe для выполнения этой работы, добавить поле к элементу, который вы собираетесь экспортировать, например, с именем 'source' (http://example/big/ppp/a
), чтобы записать, откуда этот элемент:
from scrapy import signals
from scrapy.contrib.exporter import CsvItemExporter
class MyCsvPipeline(object):
def __init__(self):
self.csvfiles = {}
self.exporter = {}
@classmethod
def from_crawler(cls, crawler):
pipeline = cls()
crawler.signals.connect(pipeline.spider_closed, signals.spider_closed)
return pipeline
def close_spider(self, spider):
for e in self.exporter.values():
e.finish_exporting()
for f in self.csvfiles.values():
f.close()
def process_item(self, item, spider):
csv = item['source'].split('/')[-1] + '.csv'
if csv not in self.csvfiles:
newfile = open('d:/ppp/'+csv, 'wb')
self.csvfiles[csv] = newfile
self.exporter[csv] = CsvItemExporter(newfile)
self.exporter[csv].start_exporting()
self.exporter[csv].export_item(item)
return item
применить этот конвейер в settings.py
ITEM_PIPELINES = {
'xxxx.pipelines.MyCsvPipeline': 300,
}
другой вариант
используйте scrapy crawl xxx -t csv -o all.csv --loglevel=INFO
для экспорта всех элементов в csv, затем используйте другой скрипт для разделения его на маленькие csv в соответствии с 'source'.