我在Ruby中编写了一个Web爬虫,我正在使用它Nokogiri::HTML
来解析页面.我需要打印页面,在IRB中乱搞时我注意到了一种pretty_print
方法.然而,它需要一个参数,我无法弄清楚它想要什么.
我的抓取工具正在缓存网页的HTML并将其写入本地计算机上的文件.我想"漂亮地打印"HTML,以便它在我这样做时看起来很好并且格式正确.
@mislav的答案有点不对劲.如果您:Nokogiri支持漂亮打印:
将文档解析为XML
指示Nokogiri在解析期间忽略仅空白节点("空白")
使用to_xhtml
或to_xml
指定漂亮的打印参数
在行动:
html = '
Main Section 1
Intro
Subhead 1.1
Meat
MOAR MEAT
Subhead 1.2
Meat
'
require 'nokogiri'
doc = Nokogiri::XML(html,&:noblanks)
puts doc
#=>
#=> Main Section 1
#=> Intro
#=>
#=> Subhead 1.1
#=> Meat
#=> MOAR MEAT
#=>
#=>
#=> Subhead 1.2
#=> Meat
#=>
#=>
puts doc.to_xhtml( indent:3, indent_text:"." )
#=>
#=> ...Main Section 1
#=> ...Intro
#=> ...
#=> ......Subhead 1.1
#=> ......Meat
#=> ......MOAR MEAT
#=> ...
#=> ...
#=> ......Subhead 1.2
#=> ......Meat
#=> ...
#=>
通过HTML页面的"漂亮打印",我认为你的意思是你希望用适当的缩进重新格式化HTML结构.Nokogiri不支持这一点; pretty_print
method用于"pp"库,输出仅用于调试.
有几个项目能够很好地理解HTML,能够在不破坏实际重要的空白(着名的HTML Tidy)的情况下对其进行重新格式化,但通过谷歌搜索,我发现这篇文章名为"使用Nokogiri和XSLT轻松打印XHTML".
归结为:
xsl = Nokogiri::XSLT(File.open("pretty_print.xsl")) html = Nokogiri(File.open("source.html")) puts xsl.apply_to(html).to_s
当然,它要求您将链接的xsl文件下载到文件系统.我在我的机器上很快就尝试过,它就像一个魅力.
这对我有用:
pretty_html = Nokogiri::HTML(html).to_xhtml(indent: 3)
我尝试了上面的REXML版本,但它损坏了我的一些文档.我讨厌将xslt带入一个新项目.两人都觉得过时了.:)