JsonItemExporter方式保存数据
1 # -*- coding: utf-8 -*- 2 from scrapy.exporters import JsonItemExporter 3 4 5 class DemoPipeline(object): 6 def __init__(self): 7 self.fp = open("duanzi.json", "wb") 8 self.exporter = JsonItemExporter(self.fp, ensure_ascii=False, encoding='utf-8') 9 self.exporter.start_exporting() 10 11 def open_spider(self, spider): 12 pass 13 14 def process_item(self, item, spider): 15 self.exporter.export_item(item) 16 return item 17 18 def close_spider(self, spider): 19 self.exporter.finish_exporting() 20 self.fp.close()
或JsonLinesItemExporter保存数据
1 # -*- coding: utf-8 -*- 2 from scrapy.exporters import JsonLinesItemExporter 3 4 5 class DemoPipeline(object): 6 def __init__(self): 7 self.fp = open("duanzi.json", "wb") 8 self.exporter = JsonLinesItemExporter(self.fp, ensure_ascii=False, encoding='utf-8') 9 10 def open_spider(self, spider): 11 pass 12 13 def process_item(self, item, spider): 14 self.exporter.export_item(item) 15 return item 16 17 def close_spider(self, spider): 18 self.fp.close()
区别:
JsonItemExporter:每次把数据添加到内存中,最后统一写入到磁盘文件中。好处是,存储的是一个满足json规则的数据。坏处是如果数据量比较大,那么比较耗内存。
JsonLinesItemExporter:每次调用export_item的时候就把这个item存储到磁盘中.坏处是一个字典一行,整个文件不是一个满足json格式的文件.好处是每次数据都直接存到磁盘文件中,不会耗内存,数据相对安全.