requests example python html curl python-3.x entities

example - python requests



¿Cómo elimino las entidades HTML en una cadena en Python 3.1? (6)

Aparentemente, no tengo una reputación lo suficientemente alta como para hacer nada más que publicar esto. La respuesta de unutbu no elimina las citas. Lo único que encontré que hice fue esta función

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]

Que obtuve de esta page .

Esta pregunta ya tiene una respuesta aquí:

He buscado por todos lados y solo encontré soluciones para Python 2.6 y versiones anteriores, NADA sobre cómo hacer esto en Python 3.X. (Solo tengo acceso a la casilla Win7).

TENGO que poder hacer esto en 3.1 y preferiblemente sin bibliotecas externas. Actualmente, tengo httplib2 instalado y acceso al curl del símbolo del sistema (así es como obtengo el código fuente para las páginas). Desafortunadamente, curl no decodifica entidades html, hasta donde yo sé, no pude encontrar un comando para decodificarlo en la documentación.

SÍ, intenté hacer que Beautiful Soup funcione, MUCHAS VECES sin éxito en 3.X. Si pudiera proporcionar instrucciones EXPLICIT sobre cómo hacer que funcione en python 3 en el entorno de MS Windows, le estaría muy agradecido.

Entonces, para ser claros, necesito activar cadenas como esta: Suzy & John Suzy & John en una cadena como esta: "Suzy y John".


En mi caso, tengo una cadena html escapada en la función de escape as3. Después de una hora de google no encontré nada útil, así que escribí esta función recusrive para servir para mis necesidades. Aquí está,

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)

Editar-1 Funcionalidad agregada para manejar caracteres Unicode.



Puede usar xml.sax.saxutils.unescape para este propósito. Este módulo está incluido en la biblioteca estándar de Python, y es portátil entre Python 2.xy Python 3.x.

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


Puede usar la función html.unescape :

En Python3.4 + (gracias a JF Sebastian por la actualización):

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

En Python3.3 o anterior:

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

En Python2 :

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