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

Ali*_*iBZ 7 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
Run Code Online (Sandbox Code Playgroud)

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=('', ))),
    )
Run Code Online (Sandbox Code Playgroud)

根据scrapy doc

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

但我在parse_item. 有没有什么办法解决这一问题?是meta正确的方法吗?

B.M*_*.W. 2

当你生成一个新的 时Request,你需要指定该函数,否则它将默认callback传递给CrawlSpider 的方法。parse

\n

我遇到了类似的问题,花了我一段时间来调试。

\n
\n

回调(可调用)\xe2\x80\x93 将使用此请求的响应(一旦下载)作为其第一个参数来调用的函数。有关详细信息,请参阅下面的将附加数据传递给回调函数。如果请求未指定回调,则将使用 Spider\xe2\x80\x99s parse() 方法。请注意,如果在处理过程中引发异常,则会调用 errback。

\n

method (string) \xe2\x80\x93 此请求的 HTTP 方法。默认为“GET”。

\n

meta (dict) \xe2\x80\x93 Request.meta 属性的初始值。如果给定,传入此参数的字典将被浅复制。

\n
\n