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.

Seleccionar el primer elemento de 3n+1 desde un xpath.

¿Cómo puedo implementar una selección basada en la selección de los primeros 3n+1 elementos de una etiqueta en su ruta? Por ejemplo, digamos que tengo el siguiente xpath:

//div[@class='ResultsSectionContainer-sc-gdhf14-0 kteggz']/div[@class='Wrapper-sc-11673k2-0 gIBPSk']//div/div/a

Tomado de esta URL:

https://www.jobsite.co.uk/jobs?page=2&action=paging_next.html

El cual selecciona el @href de cada etiqueta a. Este sitio web es dinámico, por lo que necesitaría algo que pueda generalizar la ruta. Sin embargo, de cada tres etiquetas, dos no son necesarias. Por lo tanto, requiero todos esos href que pertenecen a selecciones 3n+1 cuando n = 0, 1, 2, …

¿Existe una forma de implementar esto?

Por ejemplo, el número total de href que puedo seleccionar es 75, por lo tanto, estoy buscando 25 elementos ya que 75/3 = 25, al dividir por el coeficiente principal.

¿Se puede hacer una selección como esta en Python? De lo contrario, dado una selección general:

a*n+c

¿Cómo puedo implementar una selección de este tipo al seleccionar para xpaths?

Sin embargo, si hay una alternativa más fácil disponible para seleccionar esos href de la URL, también se agradece, ya que solo puedo pensar en esta manera. Aunque presumo que este método puede generalizarse más en diferentes URLs.

¡Si hay una versión de CSS-selector, también se agradecería!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para seleccionar los primeros elementos 3n+1 de una etiqueta en su camino con XPath, puedes utilizar la sintaxis [position() mod 3 = 1]. Esto seleccionará cada elemento que tenga una posición que sea un múltiplo de tres más uno (3n+1). En tu ejemplo, puedes modificar tu expresión XPath para seleccionar cada primera etiqueta a 3n+1 agregando la sintaxis [position() mod 3 = 1] al final:

    //div[@class='ResultsSectionContainer-sc-gdhf14-0 kteggz']/div[@class='Wrapper-sc-11673k2-0 gIBPSk']//div/div/a[position() mod 3 = 1]
    

    Para implementar una selección como a*n+c con XPath, puedes utilizar las funciones numéricas de XPath como position(), count() y last() en tu expresión. Por ejemplo, para seleccionar cada etiqueta a donde la posición es igual a 3n + 1 + 2 (es decir, etiquetas a con posiciones 2, 5, 8, 11, …), puedes usar:

    //a[position() mod 3 = 2]
    

    En cuanto a una versión con selectores CSS, puedes utilizar las pseudo-clases nth-child() o nth-of-type() para seleccionar elementos basados en su posición en el elemento padre. Por ejemplo, para seleccionar cada etiqueta a donde la posición es igual a 3n + 1, puedes usar:

    div.ResultsSectionContainer-sc-gdhf14-0.kteggz > div.Wrapper-sc-11673k2-0.gIBPSk div:nth-child(3n+1) a
    

    Esto seleccionará cada etiqueta a que sea hija del tercer div en el div .Wrapper-sc-11673k2-0.gIBPSk y que tenga una posición que sea un múltiplo de tres más uno (3n+1).

Comments are closed.