如何在不使用 "meta" 的情况下在 Scrapy Parse Methods 之间同步数据?

How can I sync data between Scrapy Parse Methods without using "meta"?

我想使用元数据以外的其他方法,因为元数据当前用于处理我的蜘蛛程序中的 302 响应。当我在这个字典中添加额外的项目时,为了同步数据,302 响应被忽略

    def start_requests(self):
        for url in urls:
            self.rowExt = row
            yield scrapy.Request(
                url=url, callback=self.parse, dont_filter=True,
                meta={
                    'dont_redirect': True,
                    'handle_httpstatus_list': [302],
                }
            )

如果我向该字典添加任何额外的项目,302 响应处理将不起作用。

    def start_requests(self):
        for url in urls:
            self.rowExt = row
            yield scrapy.Request(
                url=url, callback=self.parse, dont_filter=True,
                meta={
                    'dont_redirect': True,
                    'handle_httpstatus_list': [302],
                    'Name': name,
                    'Price': price,
                }
            )

如果你用的是Scrapy v1.7+可以用cb_kwargs,用法有点类似

    yield scrapy.Request(
        url=url, callback=self.parse, dont_filter=True,
        meta={
            'dont_redirect': True,
            'handle_httpstatus_list': [302],
        },
        cb_kwargs={
            'name': name,
            'price': price,
        }
    )

    def parse(self, response, name, price):
        ....

请注意,传递给 cb_kwargs 的项目作为关键字参数传递给回调函数,因此您需要相应地调整函数签名。