BeautifulSoup devuelve espacios extra inesperados

Estoy tratando de agarrar un texto de documentos html con BeautifulSoup. En un caso muy relevante para mí, se origina un resultado extraño e interesante: después de cierto punto, la sopa está llena de espacios adicionales dentro del texto (un espacio separa cada letra de la siguiente). Intenté buscar en la web para encontrar una razón para eso, pero solo conocí algunas noticias sobre el error opuesto (sin espacios).

¿Tiene alguna sugerencia o sugerencia sobre por qué sucede y cómo resolver este problema?

Este es el código muy básico que he creado:

from bs4 import BeautifulSoup import urllib2 html = urllib2.urlopen("http://www.beppegrillo.it") prova = html.read() soup = BeautifulSoup(prova) print soup 

Y esta es una línea tomada de los resultados, la línea donde comienza a aparecer este problema:

value = \ “Giuseppe labbate ogm? non vorremmo nuovi uccelli chiamati lontre \”> <input onmouseover = \ "Sugerencia (' G iuseppelabbateogm? nonvorremmonuoviuccel lichiamicililre <

Creo que esto es un error con el analizador de HTML de Lxml. Tratar:

 from bs4 import BeautifulSoup import urllib2 html = urllib2.urlopen ("http://www.beppegrillo.it") prova = html.read() soup = BeautifulSoup(prova.replace('ISO-8859-1', 'utf-8')) print soup 

Que es una solución para el problema. Creo que el problema se solucionó en lxml 3.0 alpha 2 y lxml 2.3.6, por lo que podría valer la pena comprobar si necesita actualizar a una versión más nueva.

Si desea más información sobre el error, inicialmente se archivó aquí:

https://bugs.launchpad.net/beautifulsoup/+bug/972466

Espero que esto ayude,

Hayden

Puede especificar el analizador como html.parser :

 soup = BeautifulSoup(prova, 'html.parser') 

También puedes especificar el analizador html5 :

 soup = BeautifulSoup(prova, 'html5') 

¿No has instalado el analizador html5 todavía? Instálelo desde el terminal:

 sudo apt-get install python-html5lib 

Se puede usar el analizador xml ( soup = BeautifulSoup(prova, 'xml') ) pero es posible que veas algunas diferencias en los atributos de valores múltiples como class="foo bar" .