过滤掉 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 中的实体的主要内容,如果未能解决你的问题,请参考以下文章