scrapy 2.3 向回调函数传递附加数据

2021-06-09 13:50 更新

请求的回调是一个函数,在下载请求的响应时将调用该函数。将使用下载的 ​Response​ 对象作为其第一个参数。

例子::

def parse_page1(self, response):
    return scrapy.Request("http://www.example.com/some_page.html",
                          callback=self.parse_page2)

def parse_page2(self, response):
    # this would log http://www.example.com/some_page.html
    self.logger.info("Visited %s", response.url)

在某些情况下,您可能对向这些回调函数传递参数感兴趣,以便稍后在第二个回调中接收这些参数。下面的示例演示如何通过使用 ​Request.cb_kwargs​ 属性:

def parse(self, response):
    request = scrapy.Request('http://www.example.com/index.html',
                             callback=self.parse_page2,
                             cb_kwargs=dict(main_url=response.url))
    request.cb_kwargs['foo'] = 'bar'  # add more arguments for the callback
    yield request

def parse_page2(self, response, main_url, foo):
    yield dict(
        main_url=main_url,
        other_url=response.url,
        foo=foo,
    )

警告

Request.cb_kwargs​ 在版本中引入 ​1.7​ . 在此之前,使用 ​Request.meta​ 建议在回调时传递信息。后 ​1.7​ , ​Request.cb_kwargs​ 成为处理用户信息的首选方式,离开 ​Request.meta​ 用于与中间件和扩展等组件通信。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号