Подтвердить что ты не робот

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

Я просмотрел все вокруг и нашел решения для python 2.6 и более ранних версий, NOTHING о том, как это сделать в python 3.X. (Я имею доступ только к коробке Win7.)

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

ДА, я попытался заставить Beautiful Soup работать, много времени без успеха в 3.X. Если бы вы могли предоставить инструкции EXPLICIT о том, как заставить его работать на python 3 в среде MS Windows, я был бы очень благодарен.

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

4b9b3361

Ответ 1

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

В Python3.4 + (спасибо Дж. Ф. Себастьяну за обновление):

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

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

В Python3.3 или старше:

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

В Python2:

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

Ответ 2

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

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

Ответ 3

Очевидно, у меня недостаточно высокая репутация, чтобы что-то делать, кроме как опубликовать это. 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]

Который я получил с этой страницы.

Ответ 5

В моем случае у меня есть строка html, escaped в as3 escape-функции. После часа поиска в Google не нашли ничего полезного, поэтому я написал эту функцию 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 Добавлена ​​возможность обработки символов Unicode.