2008-09-10 18 views
6

Quiero sacar algo de información de una página web de fútbol con expresiones regulares de python. El problema es que jugadores como el primer cap, ÄÄRITALO, salen como & # 196; & # 196; RITALO!
Es decir, html usa marcas de escape para los caracteres especiales, como & # 196;Obteniendo caracteres internacionales de una página web?

¿Hay una manera simple de leer el html en la cadena de python correcta? Si fuera XML/XHTML, sería fácil, el analizador lo haría.

Respuesta

7

Recomendaría BeautifulSoup para raspar HTML. También es necesario decir que para convertir las entidades HTML a los caracteres Unicode correspondientes, así:

>>> from BeautifulSoup import BeautifulSoup  
>>> html = "<html>&#196;&#196;RITALO!</html>" 
>>> soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES) 
>>> print soup.contents[0].string 
ÄÄRITALO! 

(Sería bueno si el módulo estándar codecs incluye un codec para esto, de tal manera que se podría hacer "some_string".decode('html_entities') pero desafortunadamente no lo hace)

EDITAR: Otra solución: Python desarrollador Fredrik Lundh (autor de elementtree, entre otras cosas) tiene a function to unsecape HTML entities en su página web, que trabaja con decimal, hexadecimal y entidades con nombre (BeautifulSoup se no funciona con los hexagonales).

2

Intente utilizar BeautifulSoup. Debe hacer el truco y darle un DOM bien formateado para trabajar también.

This blog entrada parece haber tenido cierto éxito con él.

Cuestiones relacionadas