Python Scrapy | Cómo pasar la respuesta a la función principal desde la araña
He intentado buscar una solución en Google extensivamente, pero puede que no esté utilizando las palabras clave correctas. Soy consciente de que puedo usar la terminal para trabajar con selectores CSS y XPath inmediatamente, pero me gustaría saber si es posible hacerlo en el entorno del IDE fuera de la clase “spider”, es decir, en otra celda.
Código de ejemplo:
class ExampleSpider(scrapy.Spider):
name = "exampleSpider"
start_urls = ["https://www.example.com"]
Luego quiero poder trabajar con esta respuesta y los selectores en otra celda:
table_rows = response.xpath("//div[@class='example']/table/tr") # produce un error
print(table_rows.xpath("td[4]//text()")[0].get())
produce el error:
NameError: name 'response' is not defined
Cualquier ayuda/orientación sería muy apreciada.
davy.ai
Desafortunadamente, no es posible trabajar con la respuesta y los selectores fuera de la clase de araña en otra celda. Esto se debe a que el objeto de respuesta es específico de la clase de araña y su método de análisis. No es global y no se puede compartir fuera de la clase.
Si necesitas trabajar con el objeto de respuesta en otra celda, deberás pasarlo como parámetro o almacenarlo en una estructura de datos que pueda ser accedida desde fuera de la clase. Una forma de hacer esto es guardar el objeto de respuesta como un elemento de Scrapy, el cual puede ser accedido fuera de la clase de araña.
Aquí tienes un ejemplo de cómo guardar el objeto de respuesta como un elemento:
Luego, en otra celda, puedes acceder al objeto de respuesta desde el elemento:
Ten en cuenta que deberás recuperar el elemento de la salida de la araña (por ejemplo, usando scrapy crawl -o output.json) y cargarlo en tu cuaderno para poder acceder al objeto de respuesta.