es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Scrapy – no es posible extraer datos de calificaciones en Amazon.

Estoy tratando de extraer datos de calificaciones de una tienda de Amazon. Considera el siguiente enlace como ejemplo:

https://www.amazon.in/s?me=A2ABGQT3TTW1NZ&marketplaceID=A21TJRUUN4KGV

Si bien puedo extraer datos como el nombre, la calificación sobre 5, el precio, etc., no puedo extraer el número de calificaciones. Esto se almacena bajo lo siguiente:

844

def parse(self, response):
for a in response.xpath("//div[@class='s-result-item s-asin sg-col-0-of-12 sg-col-16-of-20 sg-col s-widget-spacing-small sg-col-12-of-16']"):
yield {
'ASIN' : a.xpath("//@data-asin").get(),
'Nombre' : a.xpath(".//span[@class='a-size-medium a-color-base a-text-normal']/text()").get(),
'Calificación' : a.xpath(".//span[@class='a-icon-alt']/text()").get(),
'Número de Calificaciones' : a.xpath(".//span[@class='a-size-base']/text()").get(),
'ASP' : a.xpath(".//span[@class='a-price-whole']/text()").get()
}

El número de calificaciones aparece como None.

Lo sorprendente es que funcionaba bien hasta hace unos días. Por favor, ayúdame con esto.

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para extraer el número de calificaciones, debes actualizar el XPath utilizado para extraer los datos. En lugar de usar .//span[@class='a-size-base']/text(), debes usar .//div[@class='sg-row']//div[@class='a-section a-spacing-none a-spacing-top-mini']//span[contains(text(), 'ratings')]/span[@class='a-size-base']. Este XPath localiza el elemento div que contiene la cadena ‘ratings’ y luego extrae el elemento span que contiene el número de calificaciones.

    Aquí está el código actualizado:

    def parse(self, response):
        for a in response.xpath("//div[@class='s-result-item s-asin sg-col-0-of-12 sg-col-16-of-20 sg-col s-widget-spacing-small sg-col-12-of-16']"):
            yield {
                'ASIN' : a.xpath("@data-asin").get(),
                'Nombre' : a.xpath(".//span[@class='a-size-medium a-color-base a-text-normal']/text()").get(),
                'Calificación' : a.xpath(".//span[@class='a-icon-alt']/text()").get(),
                'Número de Calificaciones' : a.xpath(".//div[@class='sg-row']//div[@class='a-section a-spacing-none a-spacing-top-mini']//span[contains(text(), 'ratings')]/span[@class='a-size-base']").get(),
                'ASP' : a.xpath(".//span[@class='a-price-whole']/text()").get()
            }
    

    ¡Espero que esto te ayude! Hazme saber si tienes alguna otra pregunta.

Comments are closed.