Nunca había sabido a ciencia cierta y menos práctica para que usar el XPATH que aparece cuando inspeccionas un elemento con Firefox (o chrome) y no ha sido trivial que funcione como esperaba.
Lo que tenía que hacer es sacar unos cuantos valores de varias páginas web con contenidos absolutamente dispares. De pronto se me ocurrió que podía usar el xpath que me devolvía firefox al inspeccionar el elemento. Luego con nokogiri y un poco de ruby estaba resuelto con muy pocas lineas y eficientemente.
Después de muchas pruebas y no obtener ningún resultado he encontrado cual es el «bug».
Cuando seleccionas el xpath de un elemento tienes una uri de este estilo:
/html/body/div[3]/div[2]/table/tbody/tr/td/div[2]/table/tbody/tr/td[2]/form/span[2]/span
firefox y chrome incluyen tbody de más. Con eliminarlos, nokigiri empieza a extraer el contenido correctamente 😉
XPath no obliga a poner todos los elementos hasta llegar a los nodos que buscas, se puede usar el selector descendiente // es equivalente al espacio en los selectores de css.
Por ejemplo puedes sustir
table/tbody/tr/td/div[2]
por
table//div[2]
Comentario by stripTM — 12 septiembre, 2012 @ 8:51 pm
Es muy útil y no está muy documentado que puedes utilizar otro tipo de etiquetas para acceder a un XPATH que nos siempre igual, por ejemplo con el id o class:
//*[@class=»cabecera»]/h3
//*[@id=»main-article-info»]
Un saludo
Comentario by Sak — 18 septiembre, 2012 @ 4:23 pm