ruby xpath nokogiri

ruby - ¿Cómo uso XPath en Nokogiri?



(2)

Parece que necesitas leer un tutorial de XPath

Su expresión //table/tbody[@id="threadbits_forum_251"]/tr significa:

  • // - Cualquier lugar en su documento XML
  • table/tbody - toma un elemento de tabla con un niño tbody
  • [@id="threadbits_forum_251"] - donde id atributo son iguales a "threadbits_forum_251"
  • tr - y toma sus elementos tr

Entonces, básicamente, necesitas saber:

  • atributos comienza con @
  • las condiciones van dentro de corchetes []

Si entendí correctamente esa API, puede ir con doc.xpath("td[3]/div[1]/a")["href"] , o td[3]/div[1]/a/@href si solo hay un elemento <a> .

No he encontrado ninguna documentación ni tutorial para eso. ¿Existe algo así?

doc.xpath(''//table/tbody[@id="threadbits_forum_251"]/tr'')

El código anterior me proporcionará cualquier table , en cualquier lugar, que tenga un hijo tbody con el id atributo igual a "threadbits_forum_251". ¿Pero por qué comienza con doble // ? ¿Por qué hay /tr al final? Consulte " Ruby Nokogiri Analizando la tabla HTML II " para más detalles.

¿Alguien puede decirme cómo extraer href , id , alt , src , etc., usando Nokogiri?

td[3]/div[1]/a/text()'' <--- extracts text

¿Cómo puedo extraer otras cosas?


Tu XPath es correcto y parece que has respondido la primera parte de tu pregunta (casi):

doc.xpath(''//table/tbody[@id="threadbits_forum_251"]/tr'')

"el código de arriba me dará cualquier tabla tabla tr, en cualquier lugar , que tenga un tbody hijo con el atributo id igual a threadbits_forum_251"

// significa que el siguiente elemento puede aparecer en cualquier parte del documento.

/tr al final significa, obtener el nodo tr del elemento coincidente.

No es necesario extraer cada atributo uno por uno. Simplemente obtenga todo el nodo que contenga los cuatro atributos en Nokogiri, y obtenga los atributos usando:

theNode[''href''] theNode[''src'']

Donde theNode es tu objeto Node theNode .

Editar:

Lamento no haber usado estas bibliotecas, pero creo que la evaluación y el análisis de XPath están siendo realizados por Mechanize. Así que aquí está cómo obtendría todo el elemento y sus atributos de una vez.

doc.xpath("td[3]/div[1]/a").each do |anchor| puts anchor[''href''] puts anchor[''src''] ... end