【发布时间】:2014-08-26 20:10:39
【问题描述】:
这个示例 python 程序:
document='''<p>This is <i>something</i>, it happens
in <b>real</b> life</p>'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(document)
print(soup.prettify())
产生以下输出:
<html>
<body>
<p>
This is
<i>
something
</i>
, it happens
in
<b>
real
</b>
life
</p>
</body>
</html>
这是错误的,因为它在每个开始和结束标记之前和之后添加空格,例如,</i> 和 , 之间不应有空格。我希望它:
不要在没有空格的地方添加空格(即使在块级标签周围,如果它们在 CSS 中使用
display:inline设置样式,它们也可能会出现问题。)将所有空格折叠到一个空格中,可选的换行除外。
类似这样的:
<html>
<body>
<p>This is
<i>something</i>,
it happens in
<b>real</b> life</p>
</body>
</html>
BeautifulSoup 可以做到这一点吗?还有其他推荐的 HTML 解析器可以处理这个吗?
【问题讨论】:
-
这很大程度上取决于渲染时与相关 CSS 选择器关联的空白和显示属性。此外,很可能会使用 JavaScript 来修改所述属性。没有好的方法可以做到这一点。 (我记得几年前在github.com/cobrateam/django-htmlmin/issues/… 中提出了这个问题)
-
BeautifulSoup 的文档声明所有标签都将在自己的行中。但是,重写该方法应该不会太难 - github.com/bdoms/beautifulsoup/blob/master/…
标签: python html beautifulsoup