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格式的文件.好處是每次數據都直接存到磁盤文件中,不會耗內存,數據相對安全.