Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Network
  • » Декодировать последовательности вида & [RSS Feed]

#1 Авг. 6, 2012 23:12:54

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Декодировать последовательности вида &

Сабж.

Отредактировано odnochlen (Авг. 6, 2012 23:48:13)

Офлайн

#2 Авг. 6, 2012 23:47:00

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

Декодировать последовательности вида &

s = s.replace('&', '&')
=)

Если не только &amp, но и другие символы, то:
from html.parser import HTMLParser # python 3
from HTMLParser import HTMLParser # python 2
HTMLParser().unescape(s)



Офлайн

#3 Авг. 6, 2012 23:50:31

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Декодировать последовательности вида &

А какой смысл имеет обьект HTMLParser? unescape ведь не хранит состояние.

Офлайн

#4 Авг. 7, 2012 00:10:42

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

Декодировать последовательности вида &

Потому что это не есть “правильный” способ декодировать строку. Это просто вспомогательный метод класса HTMLParser, который мы можем заюзать, если лень писать что-то своё.

Есть еще, например, xml.sax.saxutils.unescape, с реализацией в 5 строк.



Офлайн

#5 Авг. 7, 2012 01:03:55

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Декодировать последовательности вида &

http://docs.python.org/library/htmlparser.html почему я нигде не вижу unescape?

Офлайн

#6 Авг. 7, 2012 06:12:07

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Декодировать последовательности вида &

>>> import html.entities
>>> html.entities.entitydefs['amp']
'&'
>>>

во втором то же самое через модуль htmlentitydefs



Офлайн

#7 Авг. 7, 2012 15:32:38

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Декодировать последовательности вида &

odnochlen
http://docs.python.org/library/htmlparser.html почему я нигде не вижу unescape?
Ап

Офлайн

#8 Авг. 7, 2012 16:50:21

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Декодировать последовательности вида &

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)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#9 Авг. 8, 2012 01:28:29

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Декодировать последовательности вида &amp;

PooH
А он не задокументирован
Ой как классно

А нету документации вроде javadoc, куда попадают все функции, даже без комментариев?

Офлайн

#10 Авг. 8, 2012 06:08:17

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Декодировать последовательности вида &amp;

odnochlen
А нету документации вроде javadoc, куда попадают все функции, даже без комментариев?
Есть, причем из коробки :)
pydoc -p 1234
смотрим на http://localhost:1234/



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

  • Начало
  • » Network
  • » Декодировать последовательности вида &amp;[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version