将变量赋予具有yield的回调函数废料ATR中的



我有两个函数,首先在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

最新更新