向scrapy.Request()传递额外参数

7
实际上,我想将与特定网站相关的所有数据(文本、 hrefs 和 images)存储到单个文件夹中。为了做到这一点,我需要将该文件夹的路径传递给所有不同的解析函数。因此,我想像这样在 scrapy.Request() 中传递额外的 kwargs 以传递此路径: yield scrapy.Request(url=url,dont_filter=True, callback=self.parse,errback = self.errback_function,kwargs={'path': '/path/to_folder'}) 但它出现了错误 TypeError: __init__() got an unexpected keyword argument 'kwargs'
我应该如何将该路径传递给下一个函数?

4
您可以使用meta参数来传递额外的参数。 https://doc.scrapy.org/en/latest/topics/request-response.html#request-objects - amarynets
是的,我也考虑过这个问题。但你确定这是正确的方法吗? - Amrit
1
是的,我确定。这只有一种正确的方法。 - amarynets
2个回答

15

对于任何可能需要的人......

您可以通过像这样使用meta参数来传递额外的参数......

   yield scrapy.Request(url=url,dont_filter=True, 
callback=self.parse,errback = self.errback_function,  meta={'filepath': filepath})

更新:

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

因此,在版本 >= 1.7 中以下内容将起作用:

   request = scrapy.Request('http://www.example.com/index.html',
                             callback=self.parse_page2,
                             cb_kwargs=dict(main_url=response.url))
你可以参考这份文档: https://doc.scrapy.org/en/latest/topics/request-response.html#passing-additional-data-to-callback-functions

1

这是一个老话题,但对于需要的任何人来说,要传递额外参数,必须使用cb_kwargs,然后在解析方法中调用参数。

您可以参考文档的此部分


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接