Python 在scrapy中转换最终输出?

Python 在scrapy中转换最终输出?,python,scrapy,Python,Scrapy,我有一个可以成功解析项和子项的粗略过程,但是我看不出是否有最终的钩子,它允许我在解析完所有内容之后,但在格式化为输出之前,转换最终的数据结果 我的蜘蛛正在做这样的事情: class MySpider(scrapy.Spider): def parse(self, response, **kwargs): for part in [1,2,3]: url = f'{response.request.url}?part={part}'

我有一个可以成功解析项和子项的粗略过程,但是我看不出是否有最终的钩子,它允许我在解析完所有内容之后,但在格式化为输出之前,转换最终的数据结果

我的蜘蛛正在做这样的事情:

class MySpider(scrapy.Spider):

    def parse(self, response, **kwargs):
        for part in [1,2,3]:
            url = f'{response.request.url}?part={part}'
            yield scrapy.Request(url=url, callback=self.parse_part, meta={'part': part})

    def parse_part(self, response, **kwargs)
        # ... 
        for subpart in part:
            yield {
               'title': self.get_title(subpart),
               'tag': self.get_tag(subpart)
            }
        }

这工作得很好,但在将其输出到json(或其他)之前,我还没有弄清楚在哪里可以获得完整的结果结构并对其进行转换。我想也许我可以在中间件的
过程\u spider\u输出
调用中这样做,但这似乎只给了我单个项目,而不是最终的结构。

在spider关闭后,您可以使用此方法做一些事情:

def spider_closed(self):
但是,您将无法修改方法中的项。要修改项目,您需要编写自定义管道。在管道中,您编写了一个方法,每次spider生成一个项时都会调用该方法。因此,在该方法中,您可以将所有项目保存到列表中,然后通过管道方法
close\u spider

示例: 假设您希望将所有项目都作为JSON,以便向API发送请求。您必须在
settings.py
中激活管道才能使用它

import json

class MyPipeline:

    def __init__(self, *args, **kwargs):
        self.items = []

    def process_item(self, item, spider):
        self.items.append(item)
        return item

    def close_spider(self, spider):
        # In the method to can itterate self.items and transform them to your preference.
        json_data = json.dumps(self.items)
        print(json_data)

我希望能够将输出转换为提要导出,但是我找不到任何文档来说明这是否可行。事实上,如果在scrapy中没有挂钩,这看起来管道是最好的解决方案。