如何将刮擦的项目保存到多个.jl文件



我想运行一个刮板,该刮板将不同类型的项目保存到分开的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.jlPermitNumber对象到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

告诉我这是否起作用,因为我自己没有尝试。

最新更新