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!
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 etiquetaa
3n+1 agregando la sintaxis[position() mod 3 = 1]
al final:Para implementar una selección como
a*n+c
con XPath, puedes utilizar lasfunciones numéricas de XPath
comoposition()
,count()
ylast()
en tu expresión. Por ejemplo, para seleccionar cada etiquetaa
donde la posición es igual a3n + 1 + 2
(es decir, etiquetasa
con posiciones 2, 5, 8, 11, …), puedes usar:En cuanto a una versión con selectores CSS, puedes utilizar las pseudo-clases
nth-child()
onth-of-type()
para seleccionar elementos basados en su posición en el elemento padre. Por ejemplo, para seleccionar cada etiquetaa
donde la posición es igual a3n + 1
, puedes usar: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).