1. ホーム
  2. python

[解決済み] HTMLをインデント付きでファイルにプリティプリントする方法

2023-03-23 08:55:56

質問

私は 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>

どのように解決するのですか?

結局 ビューティフルスープ を直接使うことにしました。それは何かというと lxml.html.soupparser がHTMLのパースに使っているものです。

BeautifulSoupにはprettifyメソッドがあり、まさにそのとおりのことをしてくれます。これは、適切なインデントとすべてでHTMLをきれいにするものです。

BeautifulSoupはHTMLを修正しないので、壊れたコードは壊れたままです。しかし、この場合、コードはlxmlによって生成されているので、HTMLコードは少なくとも意味的に正しいはずです。

私の質問で与えられた例では、私はこれをしなければならないでしょう。

from BeautifulSoup 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