我想在我的请求中设置一个自定义参数,以便在我在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
是正确的选择吗?
答案 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。