我想运行一个刮板,该刮板将不同类型的项目保存到分开的JSON线文件。
我的 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
?
一个相当钝的方法,但fonctionnal方法是创建一个识别屈服项目类型的管道,然后将其存储在相应的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
告诉我这是否起作用,因为我自己没有尝试。