过滤掉 HTML 标签并解析 python 中的实体

Posted

技术标签:

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

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

【问题讨论】:

其实Dive Into Python的链接应该是this 【参考方案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】:

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

【讨论】:

以上是关于过滤掉 HTML 标签并解析 python 中的实体的主要内容,如果未能解决你的问题,请参考以下文章

JS如何过滤掉table中的thead标签, 急!

Python爬虫系列:提高解析效率

用php过滤html部分标签

JS正则过滤指定的HTML标签

JQuery追加过滤掉html之类的标签?

过滤掉字符串中的锚标签