有没有办法从Nokogiri获取原始HTML?

时间:2012-06-14 17:03:13

标签: html ruby nokogiri

我见过“How to get the raw HTML source code for a page by using Ruby or Nokogiri?”,它使用了这样的东西:

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,以便我可以在原始源上进行自己的额外解析。理想情况下,我喜欢像

这样的东西
file = open("index.html")
page = Nokogiri::HTML(file)
raw_html = page.html

注意:我也尝试了page.to_html,但它似乎稍微改变了格式。

2 个答案:

答案 0 :(得分:5)

您通常会传递File个实例,因此可以按块进行处理,但是passing a string is also ok

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

答案 1 :(得分:3)

就像一个FYI:在Nokogiri解析之后,或者在修改之后,你也可以要求Nokogiri返回文件的HTML(或者如果你正在使用的是XML):

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

将在pry中输出:

[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“更好”。