2009-06-01 7 views
1

Ich habe Zweifel über Nokogiri, ich muss die HTML-Elemente von einer Seite bekommen, und den xpath für jeden bekommen. Das Problem ist, dass ich nicht weiß, wie man es mit Nokogiri macht. Der HTML-Code ist zufällig, weil ich mehrere Seiten von verschiedenen Webseiten analysieren muss.Kann ich HTML-Elemente mit Nokogiri bekommen?

Antwort

5

Wenn Sie fragen, wie für einen Knoten zu suchen, können Sie entweder CSS oder XPath-Ausdrücke verwenden, etwa so:

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 

Wenn Sie fragen, wie, wenn Sie einen Knoten gefunden haben, können Sie abrufen der kanonischen XPath-Ausdruck für sie, Sie Node#path wie so verwenden:

puts node_found_by_css.path # => "/html/body/div[3]/div[1]/div[1]/h1" 
+0

Wenn Sie nur das erste Element wollen, benutzen Sie 'doc.at_css (" h1) ". – akuhn

0

Wenn Sie fragen, wie man in einer Seite der XPath für jedes HTML-Element erhalten, dann sollte die folgende helfen. Dies öffnet und analysiert eine Seite und druckt dann den XPath für jedes Element aus.

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

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