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