Python Scrapy管道编辑最后一项?

时间:2018-10-15 00:28:06

标签: python scrapy scrapy-pipeline

我正在Scrapy中使用管道将抓取的结果输出到JSON文件中。管道在每个要剪贴的项目之后放置一个逗号,但是,我要删除最后一个项目的逗号。有办法吗?

这是管道:

class ExamplePipeline(object):
def open_spider(self, spider):
    self.file = open('example.json', 'w')
    self.file.write("[")

def close_spider(self, spider):
    self.file.write("]")
    self.file.close()

def process_item(self, item, spider):
    line = json.dumps(
        dict(item),
        indent = 4,
        sort_keys = True,
        separators = (',', ': ')
    ) + ",\n"
    self.file.write(line)
    return item

示例输出如下:

[
{
    "item1": "example",
    "item2": "example"
},
{
    "item1": "example",
    "item2": "example"
},
]

查找最后一项而不给其逗号分隔符的python方法是什么?我以为我可以做类似if item[-1] ...的事情,但是我无法正常工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

要将其应用到管道中,您必须在文件中查找并删除该逗号:

查看相关的Python - Remove very last character in file

class ExamplePipeline(object):

    def close_spider(self, spider):
        # go back 2 characters: \n and ,
        self.file.seek(-2, os.SEEK_END)
        # cut trailing data
        self.file.truncate()
        # save
        self.file.write("]")
        self.file.close()