Как удалить объекты 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
в строку вроде этого: "Сьюзи и Джон".
Ответы
Ответ 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]
Который я получил с этой страницы.
Ответ 4
Python 3.x имеет html.entities тоже
Ответ 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.
Ответ 6
Я не уверен, является ли это встроенной библиотекой или нет, но похоже, что вам нужно и поддерживает 3.1.
От: http://docs.python.org/3.1/library/xml.sax.utils.html?highlight=html%20unescape
xml.sax.saxutils.unescape(data, entity = {}) Unescape '&', '<' и '>' в строке данных.