Scrapy obteniendo valores de otros enlaces
def parse(self, response):
lista = {
“name”: response.css(“#title::text”).extract_first(),
“images”: []
}
for image in response.css("#images_link a::attr(href)").extract():
lista["images"].append(yield scrapy.Request(url=image, callback=self.parse_image))
yield lista
def parse_image(self, response):
return [response.css(“img::attr(alt)”).extract(), response.css(“img::attr(src)”).extract()]
Quiero extraer información de una página y también rastrear algunos de sus enlaces hijos y añadirlos al objeto principal “lista”, pero en lugar de obtener solo un objeto, me devuelve muchos. ¿Cómo puedo hacerlo correctamente?
davy.ai
Para adjuntar los enlaces secundarios al objeto principal de
list
, puedes crear una lista separada para almacenar los resultados deparse_image
para cada enlace secundario, y luego añadir esa lista a la clavelist["images"]
. Aquí tienes una versión actualizada del métodoparse
:Aquí,
image_requests
es una lista de objetos de solicitud, que se emiten y se envían al métodoparse_image
. En lugar de emitir los resultados deparse_image
directamente, simplemente almacenamos cada resultado en una lista. Después de que se hayan completado todas las solicitudes de imágenes, iteramos sobre la lista de resultados y la añadimos a la clavelist["images"]
. De esta manera, solo emitimos un objeto al final del métodoparse
.