Cómo seleccionar la marca específica de hipertexto HTML en Python con html. xpath

Mientras rascaba el contenido de un sitio web, me encontré con un problema con precios promocionales que se cruzan y reemplazan con otro precio (con y html marcas de hipertexto).

Aquí está el código fuente HTML del bit que estoy tratando de tomar:



49,00 MAD
 
35,00 MAD

Estoy tratando de seleccionar sólo la parte en .

Hasta ahora he utilizado este código para extraer el precio, pero no hace distinción entre el precio cruzado y el precio real.

sourceCode.xpath('//span[@class="price"]/descendant::node()/text()')

No puedo averiguar cómo seleccionar sólo el parte.

Pregunta hecha hace 3 años, 4 meses, 28 días - Por pixelpioneerb898


3 Respuestas:

  • ¿Qué tal si seguimos realmente lo que medios conceptualmente y Retirar del elementos antes de extraer los valores del precio:

    In [1]: from lxml import html
    
    In [2]: data = """
       ...: 
       ...: 49,00 MAD
       ...:  
       ...: 35,00 MAD"""
    
    In [3]: root = html.fromstring(data)
    
    In [4]: for del_element in root.xpath('//span[@class="price"]//del'): 
                del_element.getparent().remove(del_element)
    
    In [5]: root.xpath('//span[@class="price"]/descendant::node()/text()')
    Out[5]: ['35,00\xa0', 'MAD']
    

    Yo diría que esto es probablemente mejor que tratar de escribir expresiones XPath para manejar los casos en los que tienen tanto precios antiguos como nuevos o sólo un precio único.

    Respondida el Dec 18, 2020 a las 03:11 - por techinnovator

    Votos positivos: 0 | Votos negativos: 0

  • Para seleccionar solo la parte dentro de la etiqueta <ins>, puedes utilizar la siguiente expresión XPath en Python con html.xpath:

    python
    sourceCode.xpath('//span[@class="price"]/ins//text()')
    

    Esta expresión XPath busca los nodos de texto dentro de la etiqueta <ins> que está dentro de un nodo con la clase "price".

    Al usar esta expresión, deberías obtener solo el precio real sin el precio cruzado. ¡Espero que esto te ayude a resolver tu problema! Si tienes alguna otra pregunta, ¡no dudes en decírmelo!

    Respondida el Dec 19, 2020 a las 03:11 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para seleccionar solo la parte `

    ` dentro del código HTML proporcionado usando XPath con Python, puedes utilizar la siguiente expresión:

    
    //span[@class="price"]//ins/span[@class="woocommerce-Price-amount amount"]/bdi/text()
    

    Esta expresión selecciona el elemento `

    anidado dentro del elemento

    con la claseprice, y luego selecciona el elemento

    con la clasewoocommerce-Price-amount amountdentro del elemento

    seleccionado anteriormente. Por último, selecciona el elemento

    hijo del elemento

    ` seleccionado anteriormente y extrae su texto.

    Aquí tienes un ejemplo de cómo usar esta expresión XPath con el módulo html.xpath de Python:

    python
    from html.xpath import XPath
    
    html = """
    

    49,00 MAD 35,00 MAD

    """ tree = XPath(html) price = tree.find('//span[@class="price"]//ins/span[@class="woocommerce-Price-amount amount"]/bdi/text()') print(price)

    La salida del código anterior será:

    
    35,00 MAD
    

    Esto selecciona y extrae correctamente el precio dentro del elemento `

    ` del código HTML proporcionado.

    Respondida el Dec 19, 2020 a las 03:20 - por Gemini

    Votos positivos: 0 | Votos negativos: 0