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