适度缩小HTML(来自Beautiful Soup输出)

时间:2016-03-05 01:23:38

标签: python html beautifulsoup

漂亮的汤涂抹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>

1 个答案:

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