所以我正在抓取一些内容,我试图在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))
有没有人知道解决这个问题的方法?提前谢谢。
答案 0 :(得分:1)
BeautifulSoup树将所有元素表示为对象;在构建树之后,您无法使用正则表达式来“修复”损坏的HTML。
BeautifulSoup将它留给解析器来构建树,由解析器决定如何处理损坏的HTML。不同的解析器处理不同的HTML。
您应该根据输入尝试different parsers,看看他们将如何处理您的输入。标准html.parser
选项处理损坏的HTML的效果不如其他选项,而html5lib
选项最接近现代浏览器处理损坏的HTML的方式,尽管速度低于lxml
处理的速度HTML解析。