从字符串中删除HTML标记的Python代码[重复]

这个问题在这里已经有答案了
在Python中从字符串中剥离HTML

(27个答案)

七年前关闭的

我有这样一个文本:

text=”“”<div>
<h1>标题</h1>
<p>长文本……</p>
<a href=“”>a链接</a>
</div>“”“

使用纯Python,无需外部模块,我希望:

&gt&燃气轮机&燃气轮机;打印删除标签(文本)
标题一篇长文本。。。。。链接

我知道我可以使用lxml.html.fromstring(text.text\u content()实现这一点,但我需要在纯Python中使用内置或std library for 2.6实现这一点+

我该怎么做

使用正则表达式

使用正则表达式,您可以清除中的所有内容&lt&燃气轮机:

重新导入
#根据@freylis的建议,只编译一次
CLEANR=re.compile('<*?>'))
def cleanhtml(原始html):
cleantext=re.sub(CLEANR',原始html)
返回干净文本

一些HTML文本还可以包含未括在括号中的实体,例如“&nsbm”。如果是这样,那么您可能希望将正则表达式编写为

CLEANR=re.compile('<*?>|&([a-z0-9]+|#[0-9]{1,6}|x[0-9a-f]{1,6});)

此链接包含有关此的更多详细信息

使用BeautifulSoup

您还可以使用BeautifulSoup附加包查找所有原始文本

调用BeautifulSoup时,需要显式设置解析器
我推荐”;lxml“如备选答案中所述(比默认答案(html.parser)更健壮)(即无需额外安装即可使用)

来自bs4导入组的


cleantext=BeautifulSoup(原始html,“lxml”).text

但这并不妨碍您使用外部库,因此我推荐第一种解决方案

编辑:要使用lxml,您需要pip安装lxml

发表评论