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?
1
A
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 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 }
Wenn Sie nur das erste Element wollen, benutzen Sie 'doc.at_css (" h1) ". – akuhn