HTML实体代码到文本

tgh*_*ghw 13 html python beautifulsoup

有没有人知道在Python中使用HTML实体代码(例如&lt; &amp;)将字符串转换为普通字符串(例如<&)的简单方法?

cgi.escape()将逃脱字符串(很差),但没有unescape().

bob*_*nce 43

HTMLParser具有标准库中的功能.遗憾的是,它没有记录:

(Python2 文档)

>>> import HTMLParser
>>> h= HTMLParser.HTMLParser()
>>> h.unescape('alpha &lt; &beta;')
u'alpha < \u03b2'
Run Code Online (Sandbox Code Playgroud)

(Python 3 Docs)

>>> import html.parser
>>> h = html.parser.HTMLParser()
>>> h.unescape('alpha &lt; &beta;')
'alpha < \u03b2'
Run Code Online (Sandbox Code Playgroud)

htmlentitydefs已记录在案,但要求您自己完成大量工作.

如果您只需要XML预定义实体(lt,gt,amp,quot,apos),则可以使用minidom来解析它们.如果您只需要预定义的实体而没有数字字符引用,您甚至可以使用普通的旧字符串替换速度.

  • 以下是标准库中记录的函数,它将转义的HTML代码转换为普通字符串:http://docs.python.org/library/xml.sax.utils.html#xml.sax.saxutils.unescape (2认同)

tgh*_*ghw 12

我一开始忘了标记它,但我正在使用BeautifulSoup.

在文档中挖掘,我发现:

soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES)
Run Code Online (Sandbox Code Playgroud)

完全像我希望的那样.

  • 这仅适用于BS4之前的BeautifulSoup版本.如果您使用的是BS4,则必须使用格式化程序:http://www.crummy.com/software/BeautifulSoup/bs4/doc/#output-formatters (4认同)
  • 它不适用于&amp; 实际上,如果一个字符串包含'&',BeautifulSoup会将它转换回&amp;,这与我希望的相反. (2认同)