5
Я учусь, как использовать nokogiri и несколько вопросов пришли ко мне на основе кода нижекак использовать nokogiri методы .xpath & .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
- является лучше использовать // или/в xpath? @AnthonyWJones говорит, что использование неиспользуемого // не является хорошей идеей
- Мне пришлось удалять труп из любого рабочего xpath, иначе я получил результат «nil». Как можно удалить элемент из xpath, чтобы заставить работу работать?
- Должен ли я использовать .xpath дважды, чтобы извлечь данные, если не использовать полный xpath?
- Почему я не могу сделать .at_xpath работать для извлечения данных? он отлично работает here В чем разница?
@ Симоне Карлетти: вам это нужно. Возможно, все мои вопросы приходят, потому что я не знаю, как читать документацию на http://nokogiri.org. Я не знаю, как найти что-либо о вызове текстового метода на узле. Можно ли написать об этом больше. Я уже нашел, что мой скрипт немного медленный, было бы здорово сделать это быстрее. – Radek
Я обнаружил, что местозаполнитель XPath - это реальное выражение xpath. Итак, что значит использовать * в качестве заполнителя? – Radek
* означает любой узел. Например, в '/ node/foo/one' и'/node/bar/one', '/ node/*/one' соответствует оба пути. –