美丽的汤删除标签错误

时间:2015-03-12 17:54:18

标签: python html regex beautifulsoup

所以我正在抓取一些内容,我试图在python中删除带有beautifulsoup的html标签,但保留内容。例如,给定:

<p>Hello, how <b>are</b> you</p>

我想要输出:

Hello, how are you

通常,我会使用get_text方法。问题是,显然我抓的一些页面中有html错误。例如:

<p>Hello, how </b><b>are</b> you</p>

当发生这种情况时,get_text()最终会删除我想要的文本的大部分内容。我尝试使用正则表达式来做这件事并且遇到同样的问题:

    description = re.sub("<.[^/<>]*>", "", str(description))    
    description = re.sub("</.[^/<>]*>", "", str(description))   

有没有人知道解决这个问题的方法?提前谢谢。

1 个答案:

答案 0 :(得分:1)

BeautifulSoup树将所有元素表示为对象;在构建树之后,您无法使用正则表达式来“修复”损坏的HTML。

BeautifulSoup将它留给解析器来构建树,由解析器决定如何处理损坏的HTML。不同的解析器处理不同的HTML。

您应该根据输入尝试different parsers,看看他们将如何处理您的输入。标准html.parser选项处理损坏的HTML的效果不如其他选项,而html5lib选项最接近现代浏览器处理损坏的HTML的方式,尽管速度低于lxml处理的速度HTML解析。