У меня есть сомнения относительно nokogiri, мне нужно получить HTML-элементы со страницы и получить xpath для каждого из них. Проблема в том, что я не могу понять, как это сделать с нокогири. HTML-код случайный, потому что я должен разбирать несколько страниц с разных сайтов.Могу ли я получить html-элементы с nokogiri?
1
A
ответ
5
Если вы спрашиваете, как поиск узла, вы можете использовать либо CSS или XPath выражения, например:
require 'rubygems'
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open("http://slashdot.com/"))
node_found_by_css = doc.css("h1").first
node_found_by_xpath = doc.xpath("/html/body//h1").first
Если вы спрашиваете, как после того, как вы нашли узел, вы можете получить каноническое выражение XPath для этого, вы можете использовать Node#path
так:
puts node_found_by_css.path # => "/html/body/div[3]/div[1]/div[1]/h1"
0
Если вы спрашиваете, как получить XPath для каждого HTML-элемента на странице, то следующий должен помочь. Это откроет и проанализирует страницу, а затем распечатает XPath для каждого элемента.
require 'rubygems'
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open("http://slashdot.com/"))
doc.traverse {|node| puts node.path }
Если вы хотите только первый элемент, просто используйте 'doc.at_css (" h1) '. – akuhn