阻止BeautifulSoup去除空格

5 投票
1 回答
1442 浏览
提问于 2025-04-18 02:17

BeautifulSoup 是一个用来处理网页数据的工具,它会在换行标签前面去掉空格。

print BeautifulSoup("<?xml version='1.0' encoding='UTF-8'?><section>    \n</section>")

上面的代码打印出来的内容是:

<?xml version="1.0" encoding="utf-8"?>
<section>
</section>

注意到在 section 标签后面的四个空格不见了!有趣的是,如果我这样做:

print BeautifulSoup("<?xml version='1.0' encoding='UTF-8'?><section>a    \n</section>")

我得到的结果是:

<?xml version="1.0" encoding="utf-8"?>
<section>a    
</section>

现在 'a' 后面的四个空格出现了!我该怎么做才能在最开始的打印语句中显示这四个空格呢?

1 个回答

1

作为一种解决方法,你可以尝试在解析之前,把所有的 <section>...</section> 替换成 <pre>...</pre>。这样,BeautifulSoup 就能完全保留空格了。举个例子:

from bs4 import BeautifulSoup
import re

html = "<?xml version='1.0' encoding='UTF-8'?><section>    \n</section>"
html = re.sub(r'(\</?)(section)(\>)', r'\1pre\3', html)
soup = BeautifulSoup(html, "lxml")

print repr(soup.pre.text)    # repr used to show where the spaces are

这样就能得到:

u'    \n'

撰写回答