nev*_*ing 1 html ruby nokogiri
我已经看过" 如何使用Ruby或Nokogiri获取页面的原始HTML源代码? ",它使用了这样的东西:
file = open("index.html")
puts file.read
page = Nokogiri::HTML(file)
Run Code Online (Sandbox Code Playgroud)
但它似乎将读取点移动到文件的末尾,以便Nokogiri无法再读取该文件.如果我交换read和Nokogiri电话:
file = open("index.html")
puts file.read
page = Nokogiri::HTML(file)
Run Code Online (Sandbox Code Playgroud)
该文件不再输出.我希望能够查询Nokogiri最初使用的HTML,以便我可以在原始源上进行自己的额外解析.理想情况下,我喜欢类似的东西
file = open("index.html")
page = Nokogiri::HTML(file)
raw_html = page.html
Run Code Online (Sandbox Code Playgroud)
注意:我也尝试过page.to_html,但它似乎稍微改变了格式.
您通常传递一个File实例,以便它可以由块处理,但传递一个字符串也可以:
html = File.read("index.html")
page = Nokogiri::HTML(html)
page_html = page.html
Run Code Online (Sandbox Code Playgroud)
仅供参考:您还可以要求 Nokogiri 在 Nokogiri 解析文档或修改后返回文档的 HTML(或 XML,如果您正在使用该文档):
doc = Nokogiri::HTML('<head><body>foo</body></head>')
puts doc.to_html
Run Code Online (Sandbox Code Playgroud)
它将在 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>
Run Code Online (Sandbox Code Playgroud)
请注意,Nokogiri 进行了一些修复以使 HTML“更好”。