108 votes

Comment Jolir Imprimer HTML dans un fichier, avec indentation

J'utilise lxml.html pour générer du HTML. Je veux imprimer (avec indentation) mon résultat final dans un fichier html. Comment je fais ça ?

C'est ce que j'ai essayé et obtenu jusqu'à maintenant

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")

Comme vous pouvez le voir, j'utilise l'attribut pretty_print=True. Je pensais que ça donnerait du code en retrait, mais ça n'aide pas vraiment. Voici la sortie :

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

51voto

Jayesh Bhoot Points 1347

Bien que ma réponse ne soit peut-être pas utile maintenant, je la laisse tomber ici pour servir de référence à qui que ce soit d'autre à l'avenir.

lxml.html.tostring(), en effet, n'imprime pas joliment le HTML fourni malgré pretty_print=True.

Cependant, le « frère » de lxml.html - lxml.etree a un bon fonctionnement.

Donc on peut l'utiliser comme suit :

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))

La sortie est la suivante :

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

28voto

AlexG Points 3695

Si vous stockez le HTML comme une chaîne non formatée, dans une variable html_string, cela peut être fait en utilisant beautifulsoup4 comme suit :

from bs4 import BeautifulSoup
print(BeautifulSoup(html_string, 'html.parser').prettify())

7voto

pgmank Points 634

Si l'ajout d'une dépendance supplémentaire n'est pas un problème, vous pouvez utiliser le paquet html5print. L'avantage par rapport aux autres solutions, c'est qu'elle embellit aussi bien le CSS que le code Javascript embarqué dans le document HTML.

Pour l'installer, exécutez :

pip install html5print

Ensuite, vous pouvez l'utiliser comme une commande :

html5-print ugly.html -o pretty.html

ou en code Python :

from html5print import HTMLBeautifier
html = '<title>Page Title</title><p>Some text here</p>'
print(HTMLBeautifier.beautify(html, 4))

5voto

Vadym Pasko Points 41

J'ai essayé prettify de BeautifulSoup et les solutions HTMLBeautifier de html5print, mais comme j'utilise yattag pour générer du HTML, il semble plus approprié d'utiliser sa fonction indent, qui produit une sortie bien indentée.

from yattag import indent

rawhtml = "String with some HTML code..."

result = indent(
    rawhtml,
    indentation = '    ',
    newline = '\r\n',
    indent_text = True
)

print(result)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X