【问题标题】:Beautiful Soup Remove Tag Error美丽的汤删除标签错误
【发布时间】:2015-05-15 00:45:20
【问题描述】:

所以我正在抓取一些内容,并尝试在 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))   

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

【问题讨论】:

  • BeautifulSoup 处理损坏的 HTML,将其留给解析器来理解它。不同的解析器对损坏的 HTML 有不同的意义。尝试在您的内容上使用different parser
  • 做到了!我使用 htlm5lib 而不是默认解析器,这解决了问题。谢谢。

标签: python html regex beautifulsoup


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多