Как удалить HTML-объекты в строке в Python 3.1? [дубликат]

этот вопрос уже есть ответ здесь:

Я осмотрел все вокруг и нашел только решения для Python 2.6 и ранее, ничего о том, как это сделать в Python 3.X. (У меня есть доступ только к Win7 box.)

Я должен быть в состоянии сделать это в 3.1 и желательно без внешних библиотек. В настоящее время у меня установлен httplib2 и доступ к командной строке curl (так я получаю исходный код для страниц). К сожалению, curl не декодирует HTML-объекты, насколько я знаю, я не смог найти команду для его декодирования в документации.

да, я пытался заставить красивый суп работать, много раз без успеха в 3.X. Если вы можете предоставить явные Инструкции о том, как заставить его работать в python 3 в среде MS Windows, Я был бы очень благодарен.

Итак, чтобы быть ясным, мне нужно повернуть строки следующим образом:Suzy & John в строку, подобную этой: "Suzy & John".

6 ответов


вы можете использовать функцию HTML-код.unescape:

на Питон3.4+ (спасибо J. F. Sebastian за обновление):

import html
html.unescape('Suzy & John')
# 'Suzy & John'

html.unescape('"')
# '"'

на Питон3.3 или старше:

import html.parser    
html.parser.HTMLParser().unescape('Suzy & John')

на вместо python2:

import HTMLParser
HTMLParser.HTMLParser().unescape('Suzy & John')

можно использовать xml.sax.saxutils.unescape для этой цели. Этот модуль включен в стандартную библиотеку Python и переносится между Python 2.x и Python 3.x.

>>> import xml.sax.saxutils as saxutils
>>> saxutils.unescape("Suzy & John")
'Suzy & John'

видимо, я не иметь достаточно высокую репутацию делать что угодно, но после этого. ответ unutbu не раскодировал котировок. Единственное, что я нашел, что сделал, это эта функция

import re
from htmlentitydefs import name2codepoint as n2cp

def decodeHtmlentities(string):
    def substitute_entity(match):        
        ent = match.group(2)
        if match.group(1) == "#":
            return unichr(int(ent))
        else:
            cp = n2cp.get(ent)
            if cp:
                return unichr(cp)
            else:
                return match.group()
    entity_re = re.compile("&(#?)(\d{1,5}|\w{1,8});")
    return entity_re.subn(substitute_entity, string)[0]

что я получил от этого страница.


Python 3.х HTML-код.лиц слишком


в моем случае у меня есть строка html, экранированная в функции AS3 escape. После часа googling не нашли ничего полезного, поэтому я написал эту функцию recusrive, чтобы служить для моих нужд. Вот он,

def unescape(string):
    index = string.find("%")
    if index == -1:
        return string
    else:
        #if it is escaped unicode character do different decoding
        if string[index+1:index+2] == 'u':
            replace_with = ("\"+string[index+1:index+6]).decode('unicode_escape')
            string = string.replace(string[index:index+6],replace_with)
        else:
            replace_with = string[index+1:index+3].decode('hex')
            string = string.replace(string[index:index+3],replace_with)
        return unescape(string)

Edit-1 добавлена функциональность для обработки символов Юникода.


Я не уверен, если это встроенная библиотека или нет, но похоже, что вам нужно и поддерживает 3.1.

от: http://docs.python.org/3.1/library/xml.sax.utils.html?highlight=html%20unescape

XML-файле.саксофон.саксутилы.unescape (data, entities={}) Unescape'&', ' ' в строке данных.

Яков