如何使用缩进将 HTML 漂亮地打印到文件中

新手上路,请多包涵

我正在使用 lxml.html 生成一些 HTML。我想将我的最终结果漂亮地打印(带缩进)到一个 html 文件中。我怎么做?

这是我到目前为止所尝试和得到的

import lxml.html as lh
from lxml.html import builder as E
sliderRoot=lh.Element("div", E.CLASS("scroll"), style="overflow-x: hidden; overflow-y: hidden;")
scrollContainer=lh.Element("div", E.CLASS("scrollContainer"), style="width: 4340px;")
sliderRoot.append(scrollContainer)
print lh.tostring(sliderRoot, pretty_print = True, method="html")

如您所见,我正在使用 pretty_print=True 属性。我认为这会给出缩进代码,但它并没有真正帮助。这是输出:

<div style="overflow-x: hidden; overflow-y: hidden;" class="scroll"><div style="width: 4340px;" class="scrollContainer"></div></div>

原文由 bcosynot 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 735
2 个回答

我最终直接使用了 BeautifulSoup 。这是 lxml.html.soupparser 用来解析 HTML 的东西。

BeautifulSoup 有一个 prettify 方法,它完全按照它说的做。它用适当的缩进和一切美化 HTML。

BeautifulSoup 不会修复 HTML,因此损坏的代码会一直损坏。但在这种情况下,由于代码是由 lxml 生成的,因此 HTML 代码至少在语义上应该是正确的。

在我的问题给出的例子中,我将不得不这样做:

 from bs4 import BeautifulSoup as bs
root = lh.tostring(sliderRoot) #convert the generated HTML to a string
soup = bs(root)                #make BeautifulSoup
prettyHTML = soup.prettify()   #prettify the html

原文由 bcosynot 发布,翻译遵循 CC BY-SA 4.0 许可协议

虽然我的回答现在可能没有帮助,但我把它放在这里作为未来其他人的参考。

lxml.html.tostring() 实际上,尽管有 pretty_print=True ,但并不能很好地打印提供的 HTML。

但是, lxml.html - lxml.etree 的“兄弟姐妹”让它运行良好。

因此,可以按如下方式使用它:

 from lxml import etree, html

document_root = html.fromstring("<html><body><h1>hello world</h1></body></html>")
print(etree.tostring(document_root, encoding='unicode', pretty_print=True))

输出是这样的:

 <html>
  <body>
    <h1>hello world</h1>
  </body>
</html>

原文由 Jayesh Bhoot 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题