Форум сайта python.su
Сабж.
Отредактировано odnochlen (Авг. 6, 2012 23:48:13)
Офлайн
s = s.replace('&', '&')
from html.parser import HTMLParser # python 3 from HTMLParser import HTMLParser # python 2 HTMLParser().unescape(s)
Офлайн
А какой смысл имеет обьект HTMLParser? unescape ведь не хранит состояние.
Офлайн
Потому что это не есть “правильный” способ декодировать строку. Это просто вспомогательный метод класса HTMLParser, который мы можем заюзать, если лень писать что-то своё.
Есть еще, например, xml.sax.saxutils.unescape, с реализацией в 5 строк.
Офлайн
http://docs.python.org/library/htmlparser.html почему я нигде не вижу unescape?
Офлайн
>>> import html.entities >>> html.entities.entitydefs['amp'] '&' >>>
Офлайн
odnochlenАп
http://docs.python.org/library/htmlparser.html почему я нигде не вижу unescape?
Офлайн
odnochlenА он не задокументированodnochlenАп
http://docs.python.org/library/htmlparser.html почему я нигде не вижу unescape?
In [2]: HTMLParser.unescape? Type: instancemethod Base Class: <type 'instancemethod'> String Form:<unbound method HTMLParser.unescape> Namespace: Interactive File: /usr/lib/python2.7/HTMLParser.py Definition: HTMLParser.unescape(self, s) Docstring: <no docstring> In [3]: %psource HTMLParser.unescape def unescape(self, s): if '&' not in s: return s def replaceEntities(s): s = s.groups()[0] try: if s[0] == "#": s = s[1:] if s[0] in ['x','X']: c = int(s[1:], 16) else: c = int(s) return unichr(c) except ValueError: return '&#'+s+';' else: # Cannot use name2codepoint directly, because HTMLParser supports apos, # which is not part of HTML 4 import htmlentitydefs if HTMLParser.entitydefs is None: entitydefs = HTMLParser.entitydefs = {'apos':u"'"} for k, v in htmlentitydefs.name2codepoint.iteritems(): entitydefs[k] = unichr(v) try: return self.entitydefs[s] except KeyError: return '&'+s+';' return re.sub(r"&(#?[xX]?(?:[0-9a-fA-F]+|\w{1,8}));", replaceEntities, s)
Офлайн
PooHОй как классно
А он не задокументирован
Офлайн
odnochlenЕсть, причем из коробки :)
А нету документации вроде javadoc, куда попадают все функции, даже без комментариев?
pydoc -p 1234
Офлайн