2013-02-28 102 views
9

我正在使用Python和BeautifulSoup 4库处理HTML,我无法找到一个用空格替换 的明显方法。相反,它似乎被转换为一个Unicode不间断的空格字符。如何使用BeautifulSoup替换或删除像“ ”这样的HTML实体4

我错过了一些明显的东西吗?什么是最好的方式来取代& nbsp;有一个正常的空间使用BeautifulSoup?

编辑以补充说明我使用的是最新版本BeautifulSoup 4,因此Beautiful Soup 3中的convertEntities=BeautifulSoup.HTML_ENTITIES选项不可用。

+2

但是,它*是一个非破坏性空间... – 2013-02-28 14:48:55

+0

是的,我知道 是一个非破坏性的空间。所以你说的正确的做法是获取我想要的HTML片段,然后运行Unicode搜索并替换?我想这就是我想要的,我只是认为有一个相当于旧的convertEntities选项。 – 2013-02-28 14:52:48

回答

8

请参阅Entities的文档。 BeautifulSoup 4为所有实体生成适当的Unicode:

传入的HTML或XML实体总是转换为相应的Unicode字符。

是的, 变成了一个不间断的空格字符。如果你真的希望这些是空格字符,你必须做一个unicode替换。

15
>>> soup = BeautifulSoup('<div>a&nbsp;b</div>') 
>>> soup.prettify(formatter=lambda s: s.replace(u'\xa0', ' ')) 
u'<html>\n <body>\n <div>\n a b\n </div>\n </body>\n</html>' 
+0

这是一个优雅的方法,使用formatter进行搜索和替换。但是,如果我没有看到@Martijn Pieters的回答,这会有点神秘,所以我会将他标记为公认的答案,因为它有更多的解释。 – 2013-02-28 15:19:12

2

我只是用unicode替换non-breaking空间。

nonBreakSpace = u'\xa0' 
soup = soup.replace(nonBreakSpace, '') 

一个好处是,即使您使用的是BeautifulSoup,也不需要。