2012-06-14 32 views
1

我見過的「How to get the raw HTML source code for a page by using Ruby or Nokogiri?」,它採用這樣的:有沒有從Nokogiri獲取原始HTML的方法?

file = open("index.html") 
puts file.read 
page = Nokogiri::HTML(file) 

但它似乎讀取點移動到文件的末尾,以便引入nokogiri無法讀取該文件了。如果我換read和Nokogiri電話:

file = open("index.html") 
puts file.read 
page = Nokogiri::HTML(file) 

該文件不再輸出。我希望能夠查詢Nokogiri最初使用的HTML,以便我可以對原始源進行自己的額外解析。理想情況下,我想是這樣

注:我也試過page.to_html,但似乎稍微改變格式。

回答

5

通常你傳遞一個File實例,以便它可以通過數據塊進行處理,但passing a string is also ok

html = File.read("index.html") 
page = Nokogiri::HTML(html) 
page_html = page.html 
+0

完美地工作。我沒有意識到你可以給它一個HTML字符串。謝謝。 –

+0

@neval:是的,'string_or_io'是它在文檔中被引用的方式。 Python通常對潛在的大輸入做同樣的事情(如果你發送一個類似文件的對象,並且算法允許它,它將被塊讀取)。 – tokland

+0

明白了。我仍然只是從Ruby和Nokogiri開始,並且不知道什麼。謝謝您的幫助。 –

3

正如一個供參考:您也可以要求引入nokogiri返回HTML(或XML如果這就是你」重新文檔與工作),之後引入nokogiri已經解析它,或修改後:

doc = Nokogiri::HTML('<head><body>foo</body></head>') 
puts doc.to_html 

將在撬輸出:

[4] (pry) main: 0> puts doc.to_html 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html> 
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head> 
<body>foo</body> 
</html> 

請注意,Nokogiri做了一些修正,使HTML「更好」。

+0

OP要求內容不變。從問題:「注意:我也嘗試過page.to_html,但它似乎稍微改變了格式。」 – tokland

+0

正確。這不是一個答案,只是爲了提供稍後可能有用的附加信息。這就是爲什麼它說,「就像一個供參考」。 –

相關問題