漂亮的汤涂抹HTML,以便每个元素都开始一个新的行。
我发现的所有HTML缩小器都将所有内容压缩为一行。
是否有某个地方(最好是在Python中)输出普通HTML的工具。那就是:块元素将获得一个新行,但内联元素不会?
BS输出
<h2>
headline
</h2>
<p>
Blah blah
<b>
bold text
</b>
same paragraph blah
<a href="">
a link in the text
</a>
</p>
<p>
Another paragraph
</p>
缩小的
<h2>headline</h2><p> Blah blah <b> bold text </b> same paragraph blah <a href=""> a link in the text </a></p><p> Another paragraph</p>
我想要什么
<h2>headline</h2>
<p> Blah blah <b> bold text </b> same paragraph blah <a href=""> a link in the text </a></p>
<p> Another paragraph</p>
答案 0 :(得分:1)
这是一个快速而肮脏的解决方案。
制作每个块级元素的开始标记的正则表达式。在BeautifulSoup树上使用str()
,然后使用re.sub()
在块级元素前插入\ n。
import re
blocktags = '''\
<address <article <aside
<blockquote
<canvas
<dd <div <dl
<fieldset <figcaption <figure <footer <form
<h1 <h2 <h3 <h4 <h5 <h6 <header <hgroup <hr
<li
<main
<nav <noscript
<ol <output
<p <pre
<section
<table <tfoot
<ul
<video'''.split()
pat = re.compile('(' + '|'.join(blocktags) + ')')
blocked_str = pat.sub(r'\n\1', str(soup))