Asignar una variable a una función de devolución de llamada con “yield”.
En Scrapy
Tengo dos funciones, al principio se llama a parse()
y luego se llama a parse_each()
en parse()
.
class UtamapSpider(scrapy.Spider):
def parse(self, response):
yield scrapy.Request(url=each_url, callback=self.parse_each)
def parse_each(self,response):
Ahora, quiero pasar algunos parámetros adicionales a parse_each
.
Entonces, lo que quiero hacer es esto.
class UtamapSpider(scrapy.Spider):
def parse(self, response):
yield scrapy.Request(url=each_url, callback=self.parse_each(99)) #ejemplo de pasar el valor `99`
def parse_each(self,response,myvalue):
print(myvalue) # 99
Me temo que puede ser imposible, pero ¿hay alguna forma de pasar los datos adicionales a la función de devolución de llamada?
davy.ai
Sí, es posible pasar datos adicionales a la función de devolución de llamada en Scrapy. Una forma de hacerlo es usando el parámetro
cb_kwargs
al llamar ascrapy.Request()
enparse()
. El parámetrocb_kwargs
permite pasar un diccionario de argumentos clave a la función de devolución de llamada. Aquí tienes un ejemplo:En este ejemplo, la variable
myvalue
está definida enparse()
y se pasa aparse_each()
utilizandocb_kwargs=dict(myvalue=myvalue)
en la llamada ascrapy.Request()
.Alternativamente, también puedes usar funciones parciales del módulo
functools
para pasar argumentos adicionales a la función de devolución de llamada. Aquí tienes un ejemplo:En este ejemplo, se utiliza la función
partial()
para crear una nueva función que contiene el argumentomyvalue
, el cual se pasa como función de devolución de llamada ascrapy.Request()
.