1

我看过“如何使用 Ruby 或 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,这样我就可以对原始源进行自己的额外解析。理想情况下,我想要类似的东西

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

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

4

2 回答 2

5

您通常传递一个File实例,以便它可以被块处理,但传递一个字符串也可以

html = File.read("index.html")
page = Nokogiri::HTML(html)
page_html = page.html
于 2012-06-14T17:08:35.303 回答
3

仅供参考:您也可以要求 Nokogiri 在 Nokogiri 解析或修改后返回文档的 HTML(或 XML,如果这是您正在使用的):

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

于 2012-06-14T22:28:49.587 回答