在Python中从Unicode字符串中移除HTML标记

3

我有一个从XML文件中抓取的强类型数据,其中包含一些HTML格式标签

(<b>, <i>, etc)

有没有快速简便的方法从文本中删除所有这些标签?
我尝试过
str = str.replace("<b>","")

我已经尝试将此方法应用到其他标签上多次,但并没有起作用。


请不要将 str 作为变量名。 - Mark Byers
马克,我不是,我只是为了举例才打出来的。 - Alex B
3个回答

6

使用lxml.html:

lxml.html.fromstring(s).text_content()

这将删除所有标签并将所有实体转换为它们对应的字符。

谢谢!但是我尝试这样做时,会得到以下错误:AttributeError: 'module' object has no attribute 'html' - Alex B

1

以下是如何使用BeautifulSoup模块仅替换一些标签,而保留其余HTML的方法:

from BeautifulSoup import BeautifulSoup, NavigableString

def strip_tags(html, invalid_tags):
  soup = BeautifulSoup(html)
  for tag in soup.findAll(True):
    if tag.name in invalid_tags:
      s = ""
      for c in tag.contents:
        if type(c) != NavigableString:
          c = strip_tags(unicode(c), invalid_tags)
        s += unicode(c)
      tag.replaceWith(s)
  return soup

html = "<p>Good, <b>bad</b>, and <i>ug<b>l</b><u>y</u></i></p>"
invalid_tags = ['b', 'i', 'u']
print strip_tags(html, invalid_tags)

结果:

<p>Good, bad, and ugly</p>

1

听起来他并不想解析任何HTML,只是要将其全部剥离,以便得到纯文本(有点像innerHTML函数)。 - Stephen Swensen
Stephen,你是正确的。我不想解析字符串,我只想删除HTML格式(即尖括号内的任何内容完全删去)。 - Alex B
哎呀,我的意思是innerText属性,而不是“innerHTML函数”。 - Stephen Swensen
您将无法仅仅移除HTML格式而不进行更复杂的解析。对于一些简单的样本可能是可行的,但对于复杂的样本则不行。 - Achim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接