我想运行一个刮刀,它可以保存不同类型的项目来分隔JSON Lines文件。
我的settings.py
有这个:
ITEM_PIPELINES = {
'permits.pipelines.PermitTypePipeline': 300,
'permits.pipelines.PermitNumberPipeline': 301,
}
我的pipelines.py
有这个:
class PermitTypePipeline(object):
def process_item(self, item, spider):
return item
class PermitNumberPipeline(object):
def process_item(self, item, spider):
return item
items.py
有这个:
class PermitType(scrapy.Item):
permitWebCode= scrapy.Field()
class PermitNumber(scrapy.Item):
permitNumber= scrapy.Field()
my_spider.py
有这个:
def parse(self,response):
## Some scraper code here ...
yield PermitType(permitWebCode=someScrapedVariable)
yield PermitNumber(permitNumber=anotherScrapedVariable)
如何将产生的PermitType
对象保存到permit_types.jl
,将PermitNumber
对象保存到permit_number.jl
?
答案 0 :(得分:1)
一种相当生硬但最简单的方法是创建一个管道,识别所产生项目的类型,然后将其存储在相应的json文件中。它可能看起来像这样:
import json
import ClassA
import ClassB
class JsonWriterPipeline(object):
def close_spider(self, spider):
self.file.close()
def process_item(self, item, spider):
if type(item) is ClassA:
self.file = open('classA.jl', 'w')
elif type(item) is ClassB:
self.file = open('classB.jl', 'w')
else:
return item
line = json.dumps(dict(item)) + "\n"
self.file.write(line)
return item
告诉我这是否有效,因为我自己没有尝试过。