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 elementostr
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