¿Obtener caracteres internacionales de una página web?[duplicar]
Pregunta
Esta pregunta ya tiene respuesta aquí:
- ¿Decodificar entidades HTML en una cadena de Python? 5 respuestas
Quiero extraer información de una página web de fútbol usando expresiones regulares simples de Python.¡El problema es que jugadores como el primer personaje, ÄÄRITALO, salen como ÄÄRITALO!
Es decir, HTML utiliza marcado con escape para los caracteres especiales, como Ä
¿Existe una forma sencilla de leer el html en la cadena de Python correcta?Si fuera XML/XHTML sería fácil, el analizador lo haría.
Solución
yo recomendaria hermosasopa para raspado de HTML.También debes indicarle que convierta entidades HTML a los caracteres Unicode correspondientes, así:
>>> from BeautifulSoup import BeautifulSoup
>>> html = "<html>ÄÄRITALO!</html>"
>>> soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES)
>>> print soup.contents[0].string
ÄÄRITALO!
(Sería bueno si el estándar códecs El módulo incluía un códec para esto, de modo que podrías hacer "some_string".decode('html_entities')
¡pero desafortunadamente no es así!)
EDITAR:Otra solución:El desarrollador de Python Fredrik Lundh (autor de elementtree, entre otras cosas) ha una función para desbloquear entidades HTML en su sitio web, que funciona con entidades decimales, hexadecimales y con nombre (BeautifulSoup no funcionará con las hexadecimales).
Otros consejos
Intenta usar hermosasopa.Debería funcionar y brindarte un DOM bien formateado para trabajar también.
este blog La entrada parece haber tenido cierto éxito.
No lo he probado yo mismo, pero ¿lo has probado tú?
http://zesty.ca/python/scrape.html ?
Parece tener un método htmldecode(text) que haría lo que quieras.