2011-10-16 14 views
5

Así que analicé una página html con .findAll (BeautifulSoup) a la variable llamada result. Si escribo result en terminal de Python continuación, pulse Intro, veo texto normal como se esperaba, pero como quería posprocesarlos este resultado como objeto de cadena, he notado que str(result) retornos de basura, como este ejemplo:Cómo convertir BeautifulSoup.ResultSet a la cadena

\xd1\x87\xd0\xb8\xd0\xbb\xd0\xbd\xd0\xb8\xd1\x86\xd0\xb0</a><br />\n<hr />\n</div> 

HTML la fuente de la página es utf-8 codificada

¿Cómo puedo manejar esto?


Código es básicamente esto, en caso de que importa:

from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(urllib.open(url).read()) 
result = soup.findAll(something) 

Python es 2,7

+0

muestra su código pls – cetver

Respuesta

10

Python 2.6.7 BeautifulSoup. versión 3.2.0

Esto funcionó para mí:

unicode.join(u'\n',map(unicode,result)) 

estoy bastante seguro de que un result es un objeto BeautifulSoup.ResultSet, lo que parece ser una extensión de la lista estándar de Python

0

Eso no es basura, eso es de texto con codificación UTF-8. Use Unicode instead.

+0

es de uso común término para describir problemas de codificación/carácter, es seguro que no basura literalmente – theta

+0

Pero no hay ningún problema. Eso es texto codificado en UTF-8; simplemente no lo reconoces –

0

Utilice esta:

unicodedata.normalize('NFKC', p.decode()).encode('ascii','ignore') 

Unicode tiene multiple normalization forms Esa salida no debe ser basura.
Utilice el atributo originalEncoding para verificar el esquema de codificación. Con respecto a las implementaciones
Unicode de Python, se refieren this document (incluso para la normalización)

+0

'soup.originalEncoding' devuelve' utf-8'. 'result' que es el objeto BS.ResultSet no admite estos atributos. Y seguramente no quiero decodificar 'utf-8' y codificar a ASCII ya que pierdo todos los caracteres extraños (a inglés). Quiero el objeto de cadena 'utf-8' fuera de este objeto BS.ResultSet – theta

+0

¿Ha intentado pasar por el enlace dado en la respuesta de @ Ignacio? –

3
from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(urllib.open(url).read()) 
#findAll should get multiple parsed result 
result = soup.findAll(something) 
#then iterate result 
for line in result: 
    #get str value from each line,replace charset with utf-8 or other charset you need 
    print line.__str__('charset') 

BTW: La versión de BeautifulSoup es beautifulsoup-3.2.1