我有两个函数,首先在parse()
中调用parse()
和parse_each()
class UtamapSpider(scrapy.Spider):
def parse(self, response):
yield scrapy.Request(url=each_url, callback=self.parse_each)
def parse_each(self,response):
现在,我想向parse_each传递一些额外的参数。所以,我想做的就是这样。
class UtamapSpider(scrapy.Spider):
def parse(self, response):
yield scrapy.Request(url=each_url, callback=self.parse_each(99)) #example pass value `99`
def parse_each(self,response,myvalue):
print(myvalue) # 99
恐怕这可能是不可能的,但有什么好的方法可以将额外的数据传递给回调函数吗??
在子请求和解析函数之间共享值的正确方法是将其从Request对象传递到meta
属性中,后者接受将复制到要创建的Response对象的dict。例如:
class UtamapSpider(scrapy.Spider):
def parse(self, response):
yield scrapy.Request(url=each_url, callback=self.parse_each, meta={'myvalue': 99})
def parse_each(self,response,myvalue):
print(response.meta['myvalue'])) # 99
来自文档:
meta(dict(–Request.meta属性的初始值。如果给定,此参数中传递的dict将被浅层复制。
https://docs.scrapy.org/en/latest/topics/request-response.html#scrapy.http.Request.meta
规范的方法是使用lambda
callback=lambda response:self.parse_each(response, 99)
您可以使用Request
类的cb_kwargs
参数,如下所示。
class UtamapSpider(scrapy.Spider):
def parse(self, response):
yield scrapy.Request(url=each_url, cb_kwargs={“myvalue”: 99}, callback=self.parse_each) #example pass value `99`
def parse_each(self,response,myvalue):
print(myvalue) # 99