一大脉、制作一個保存json的pipeline
1、首先為什么要搞這個json呢水孩?
因為對于沒有數(shù)據(jù)庫的人而言镰矿,你總要有個地方存儲你的數(shù)據(jù)吧,那么久可以通過寫入json文件中俘种。
2秤标、代碼如下:
import codecs
import json
classJsonWithEncodingPipeline(object):
def__init__(self):
self.file = codecs.open('article.json','w',encoding="utf-8")#用codecs完成文件的打開和寫入
defprocess_item(self, item,spider):
lines = json.dumps(dict(item),ensure_ascii=False) +"\n"
self.file.write(lines)
returnitem
defspider_closed(self,spider):
self.file.close()
3、setting中的配置
ITEM_PIPELINES= {
'mm.pipelines.MmPipeline':300,
# 'scrapy.pipelines.images.ImagesPipeline': 1,
'mm.pipelines.ArticleImagePipeline':1,
'mm.pipelines.JsonWithEncodingPipeline':2,
}
4宙刘、將item導(dǎo)出成json格式的文件苍姜,json就被寫入了
5、用scrapy提供的json export導(dǎo)出json文件
from scrapy.exportersimport JsonItemExporter
class JsonExporterPipleline (object):
# 調(diào)用scrapy提供的json export導(dǎo)出json文件,專門用來導(dǎo)封面照片用的
def__init__(self):
self.file =open('articleexport.json','wb')
self.exporter = JsonItemExporter (self.file,encoding="utf-8",ensure_ascii=False)
self.exporter.start_exporting ()
defclose_spider(self,spider):
self.exporter.finish_exporting()
self.file.close()
defprocess_item(self, item,spider):
self.exporter.export_item ( item )
return item
6悬包、JsonExporterPipleline和JsonWithEncodingPipeline區(qū)別
準(zhǔn)確地講之前的JsonWithEncodingPipeline相當(dāng)于一堆資料衙猪,那么這堆資料你怎么拜訪了,是xml格式布近,還是csv格式垫释,還是json格式,那么fromscrapy.exportersimportJsonItemExporter就可以幫助分類吊输,command+JsonItemExporter可以看到多動的格式文件饶号。
如下:
['BaseItemExporter','PprintItemExporter','PickleItemExporter',
'CsvItemExporter','XmlItemExporter','JsonLinesItemExporter',
'JsonItemExporter','MarshalItemExporter']