scrapy 2.3 向回调函数传递附加数据
请求的回调是一个函数,在下载请求的响应时将调用该函数。将使用下载的 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
用于与中间件和扩展等组件通信。