将自定义参数传递给scrapy请求

时间:2014-01-14 19:38:19

标签: scrapy

我想在我的请求中设置一个自定义参数,以便在我在parse_item中处理它时可以检索它。这是我的代码:

def start_requests(self):
    yield Request("site_url", meta={'test_meta_key': 'test_meta_value'})

def parse_item(self, response):
    print response.meta

将根据以下规则调用parse_item:

self.rules = (
        Rule(SgmlLinkExtractor(deny=tuple(self.deny_keywords), allow=tuple(self.client_keywords)), callback='parse_item'),
        Rule(SgmlLinkExtractor(deny=tuple(self.deny_keywords), allow=('', ))),
    )

根据scrapy doc

  

Response.meta属性沿着重定向和重试传播,因此您将获得从蜘蛛发送的原始Request.meta。

但我在parse_item中没有看到自定义元。有没有什么办法解决这一问题? meta是正确的选择吗?

2 个答案:

答案 0 :(得分:1)

当您生成新的Request时,您需要指定callback函数,否则它将作为默认值传递给CrawlSpider的parse方法。

我遇到了similar problem,我花了一些时间来调试。

  

callback(callable) - 将使用此请求的响应(一旦下载)调用的函数作为其第一个参数。有关更多信息,请参阅下面将其他数据传递给回调函数。如果请求未指定回调,则将使用spider的parse()方法。请注意,如果在处理期间引发异常,则会调用errback。

     

method(string) - 此请求的HTTP方法。默认为'GET'。

     

meta(dict) - Request.meta属性的初始值。如果给定,则此参数中传递的dict将被浅层复制。

答案 1 :(得分:0)

要传递一个额外的参数,你必须使用 cb_kwargs,然后调用解析方法中的参数。

您可以参考文档的this part