2011-12-12 40 views
7

我想了解Nokogiri。有沒有人有鏈接到Nokogiri解析/刮的基本例子顯示結果樹。認爲這將有助於我的理解。什麼是使用Nokogiri的一些例子?

+3

你看過文檔/教程:http://nokogiri.org/tutorials。這個問題有點過於籠統,可能會關閉;) –

+0

這些信息位於Nokogiri文檔中。另外,如果您將瀏覽頁面右側的一些相關鏈接,可以找到使用Nokogiri的示例以及其輸出示例。 –

回答

10

採用IRB和Ruby 1.9.2:

負載引入nokogiri:

1.9.2-p290 :001 > require 'nokogiri' 
true 

解析一個文檔:

1.9.2-p290 :002 > doc = Nokogiri::HTML('<html><body><p>foobar</p></body></html>') 
#<Nokogiri::HTML::Document:0x1012821a0 
    @node_cache = [], 
    attr_accessor :errors = [], 
    attr_reader :decorators = nil 

引入nokogiri喜歡中規中矩的文檔。請注意,它添加了DOCTYPE,因爲我將其解析爲文檔。也可以將它解析爲文檔片段,但這很專業。

1.9.2-p290 :003 > doc.to_html 
"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>foobar</p></body></html>\n" 

搜索文件,找到第一<p>節點中使用CSS和抓住它的內容:

1.9.2-p290 :004 > doc.at('p').text 
"foobar" 

使用不同的方法名做同樣的事情:

1.9.2-p290 :005 > doc.at('p').content 
"foobar" 

搜索爲<body>標籤中的所有<p>節點生成文檔,並獲取第一個標籤的內容。 search返回一個節點集,它就像一個節點數組。

1.9.2-p290 :006 > doc.search('body p').first.text 
"foobar" 

更改節點的內容:

1.9.2-p290 :007 > doc.at('p').content = 'bar' 
"bar" 

發射分析的文檔作爲HTML:

1.9.2-p290 :008 > doc.to_html 
"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>bar</p></body></html>\n" 

刪除節點:

1.9.2-p290 :009 > doc.at('p').remove 
#<Nokogiri::XML::Element:0x80939178 name="p" children=[#<Nokogiri::XML::Text:0x8091a624 "bar">]> 
1.9.2-p290 :010 > doc.to_html 
"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body></body></html>\n" 

至於刮,關於SO的問題有很多使用Nokogiri從網站撕開HTML。在StackOverflow中搜索「nokogiri and open-uri」應該有所幫助。

+0

還發現從共同創造者很好的介紹:http://www.engineyard.com/blog/2010/getting-started-with-nokogiri/文章中提到的樹形圖可以看到:http://rubyreflector.com /數據結構 – user1094747

相關問題