5
Estoy aprendiendo cómo utilizar nokogiri y algunas preguntas vinieron a mí basado en el código de abajocómo utilizar métodos Nokogiri .xpath y .at_xpath
require 'rubygems'
require 'mechanize'
post_agent = WWW::Mechanize.new
post_page = post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')
puts "\nabsolute path with tbody gives nil"
puts post_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div[2]').xpath('text()').to_s.strip.inspect
puts "\n.at_xpath gives an empty string"
puts post_page.parser.at_xpath("//div[@id='posts']/div/table/tr/td/div[2]").at_xpath('text()').to_s.strip.inspect
puts "\ntwo lines solution with .at_xpath gives an empty string"
rows = post_page.parser.xpath("//div[@id='posts']/div/table/tr/td/div[2]")
puts rows[0].at_xpath('text()').to_s.strip.inspect
puts
puts "two lines working code"
rows = post_page.parser.xpath("//div[@id='posts']/div/table/tr/td/div[2]")
puts rows[0].xpath('text()').to_s.strip
puts "\none line working code"
puts post_page.parser.xpath("//div[@id='posts']/div/table/tr/td/div[2]")[0].xpath('text()').to_s.strip
puts "\nanother one line code"
puts post_page.parser.at_xpath("//div[@id='posts']/div/table/tr/td/div[2]").xpath('text()').to_s.strip
puts "\none line code with full path"
puts post_page.parser.xpath("/html/body/div/div/div/div/div/table/tr/td/div[2]")[0].xpath('text()').to_s.strip
- es mejor usar // o/en xpath? @AnthonyWJones dice que 'el uso de un // no prefijado' no es tan buena idea
- Tuve que eliminar tbody de cualquier xpath en funcionamiento, de lo contrario obtuve un resultado 'nil'. ¿Cómo es posible eliminar un elemento de xpath para que las cosas funcionen?
- ¿Tengo que usar .xpath dos veces para extraer datos si no estoy utilizando xpath completo?
- ¿Por qué no puedo hacer que .at_xpath trabaje para extraer datos? funciona bien here ¿cuál es la diferencia?
@Simone Carletti: gracias por eso. Tal vez todas mis preguntas surjan porque no sé cómo leer la documentación en http://nokogiri.org. No sé cómo encontrar algo acerca de llamar al método de texto en el nodo. ¿Sería posible escribir más sobre eso? Ya encuentro que mi secuencia de comandos es lenta, sería genial hacerlo más rápido. – Radek
Encontré que un marcador de posición XPath es una expresión xpath real. Entonces, ¿qué significa usar * como marcador de posición? – Radek
* significa cualquier nodo. Por ejemplo, en '/ node/foo/one' y'/node/bar/one', '/ node/*/one' coincide con ambas rutas. –