如何将已删除的项目保存到多个.jl文件?

时间:2018-03-29 06:32:18

标签: python web-scraping scrapy

我想运行一个刮刀,它可以保存不同类型的项目来分隔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

1 个答案:

答案 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

告诉我这是否有效,因为我自己没有尝试过。