【问题标题】:Filter out HTML tags and resolve entities in python过滤掉 HTML 标签并解析 python 中的实体
【发布时间】:2010-09-07 10:33:06
【问题描述】:

因为正则表达式让我害怕,所以我试图找到一种方法来删除所有 HTML 标记并从 Python 中的字符串中解析 HTML 实体。

【问题讨论】:

  • 其实Dive Into Python的链接应该是this

标签: python html


【解决方案1】:

使用lxml,这是python最好的xml/html库。

import lxml.html
t = lxml.html.fromstring("...")
t.text_content()

如果您只想清理 html,请查看 lxml.html.clean module

【讨论】:

    【解决方案2】:

    使用BeautifulSoup!这是完美的,你有可疑美德的传入标记,需要从中得到一些合理的东西。只需传入原文,提取所有字符串标签,加入即可。

    【讨论】:

    • 执行此操作的代码是:''.join(BeautifulSoup(value, convertEntities=BeautifulSoup.HTML_ENTITIES).findAll(text=True))
    【解决方案3】:

    虽然我同意 Lucas 的观点,即正则表达式并不那么可怕,但我仍然认为您应该使用专门的 HTML 解析器。这是因为 HTML 标准非常复杂(特别是如果您想解析从 Internet 上删除的任意“HTML”页面),您需要编写大量代码来处理极端情况。看来python includes one out of the box

    您还应该查看python bindings for TidyLib,它可以清理损坏的 HTML,使任何 HTML 解析的成功率更高。

    【讨论】:

      【解决方案4】:

      如何在解析器的帮助下解析 HTML 数据并提取数据?

      我会尝试类似chapter 8.3 in the Dive Into Python book中描述的作者

      【讨论】:

        【解决方案5】:

        如果你使用 django,你也可以使用 http://docs.djangoproject.com/en/dev/ref/templates/builtins/#striptags ;)

        【讨论】:

          【解决方案6】:

          您可能需要比正则表达式更复杂的东西。网页通常带有不属于标记的尖括号,如下所示:

           <div>5 < 7</div>
          

          用正则表达式剥离标签将返回字符串“5”并处理

           < 7</div>
          

          作为单个标签并将其剥离。

          我建议寻找已经编写好的代码来为你做这件事。我搜索了一下,发现:http://zesty.ca/python/scrape.html 也可以解析 HTML 实体。

          【讨论】:

            【解决方案7】:

            正则表达式并不可怕,但编写你自己的正则表达式来剥离 HTML 肯定会让人发疯(而且它也不会起作用)。遵循智慧之路,使用众多优秀的 HTML 解析库之一。

            Lucas 的示例也被破坏了,因为“sub”不是 Python 字符串的方法。您必须“导入 re”,然后调用 re.sub(pattern, repl, string)。但这既不是这里也不是那里,因为您问题的正确答案不涉及编写任何正则表达式。

            【讨论】:

              【解决方案8】:

              看看人们在此处的其他答案中展示的意义,我想说使用正则表达式可能不是适合您的情况的最佳主意。去尝试和测试过的东西,并将我之前的答案视为正则表达式不必那么可怕的证明。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-03-18
                • 2018-05-17
                • 1970-01-01
                • 1970-01-01
                • 2012-02-24
                • 2017-06-19
                • 1970-01-01
                • 2016-05-10
                相关资源
                最近更新 更多