2009-06-01 7 views
1

J'ai un doute sur nokogiri, j'ai besoin d'obtenir les éléments HTML d'une page, et obtenir le xpath pour chacun d'eux. Le problème est que je ne peux pas réaliser comment le faire avec nokogiri. Le code HTML est aléatoire, parce que je dois analyser plusieurs pages, à partir de différents sites Web.Puis-je obtenir des éléments html avec nokogiri?

Répondre

5

Si vous demandez comment rechercher un nœud, vous pouvez utiliser soit CSS ou des expressions XPath, comme ceci:

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 

Si vous demandez comment, une fois que vous avez trouvé un nœud, vous pouvez récupérer l'expression XPath canonique, vous pouvez utiliser Node#path comme ceci:

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

Si vous voulez seulement le premier élément, utilisez simplement 'doc.at_css (" h1) '. – akuhn

0

Si vous demandez comment obtenir le XPath pour chaque élément HTML dans une page, alors ce qui suit devrait vous aider. Cela va ouvrir et analyser une page et ensuite imprimer le XPath pour chaque élément.

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

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