Могу ли я получить элементы HTML с nokogiri? - PullRequest
1 голос
/ 01 июня 2009

У меня есть сомнения по поводу нокогири, мне нужно получить элементы HTML со страницы и получить xpath для каждого. Проблема в том, что я не могу понять, как это сделать с нокогири. HTML-код является случайным, потому что мне приходится анализировать несколько страниц с разных веб-сайтов.

Ответы [ 2 ]

5 голосов
/ 03 июня 2009

Если вы спрашиваете, как искать узел, вы можете использовать выражения 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 голосов
/ 03 апреля 2010

Если вы спрашиваете, как получить XPath для каждого HTML-элемента на странице, вам может помочь следующее. Это откроет и проанализирует страницу, а затем распечатает XPath для каждого элемента.

require 'rubygems'
require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open("http://slashdot.com/"))
doc.traverse {|node| puts node.path }
...