Кто-нибудь знает простой способ в Python преобразовать строку с кодами сущности HTML (например, <
&
) в обычную строку (например, < &)?HTML-код сущности для текста
cgi.escape()
будет избегать строк (плохо), но нет unescape()
.
Кто-нибудь знает простой способ в Python преобразовать строку с кодами сущности HTML (например, <
&
) в обычную строку (например, < &)?HTML-код сущности для текста
cgi.escape()
будет избегать строк (плохо), но нет unescape()
.
HTMLParser имеет функциональность в стандартной библиотеке. Он, к сожалению, без документов:
(python2 Docs)
>>> import HTMLParser
>>> h= HTMLParser.HTMLParser()
>>> h.unescape('alpha < β')
u'alpha < \u03b2'
(Python 3 Docs)
>>> import html.parser
>>> h = html.parser.HTMLParser()
>>> h.unescape('alpha < β')
'alpha < \u03b2'
htmlentitydefs задокументировано, но требует от вас сделать много работы самостоятельно.
Если вам нужны только предопределенные XML-объекты (lt, gt, amp, quot, apos), вы можете использовать мини-диск для их анализа. Если вам нужны только предопределенные объекты и нет числовых ссылок на символы, вы можете просто использовать обычную замену старой строки для скорости.
В Python stdlib нет ничего встроенного в unescape HTML, но есть короткий скрипт, который вы можете настроить для своих нужд по адресу http://www.w3.org/QA/2008/04/unescape-html-entities-python .html.
Использование htmlentitydefs модуль. Это мой старый код, он работал, но я уверен, что там чище и более вещий способ сделать это:
e2c = dict(('&%s;'%k,eval("u'\\u%04x'"%v)) for k, v in htmlentitydefs.name2codepoint.items())
Я забыл пометить его на первый, но я использую BeautifulSoup.
копаться в документации, я нашел:
soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES)
делает это именно так, как я надеялся.
Это работает только для версий BeautifulSoup до BS4. Если вы используете BS4, вы должны использовать форматировщик: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#output-formatters – kronion
он не работает для & Фактически, если строка содержит '&' , BeautifulSoup преобразует его обратно в &, что является противоположностью тому, что я надеялся. –
+1 Я не знал, что функция HTMLParser – vartec
Вот документальная функция из стандартной библиотеки, которая преобразует экранированный HTML-код в обычную строку: http://docs.python.org/library/xml.sax. utils.html # xml.sax.saxutils.unescape –
В Python 3.4 было [задокументировано] (https://docs.python.org/3/library/html.html#html.unescape). – 9000