Pregunta

El siguiente código de Python usa BeautifulStoneSoup para obtener la información de la API LibraryThing para Tolkien's " The Children of H & # 250; rin " ;.

import urllib2

from BeautifulSoup import BeautifulStoneSoup

URL = ("http://www.librarything.com/services/rest/1.0/"
            "?method=librarything.ck.getwork&id=1907912"
            "&apikey=2a2e596b887f554db2bbbf3b07ff812a")

soup = BeautifulStoneSoup(urllib2.urlopen(URL),
                          convertEntities=BeautifulStoneSoup.ALL_ENTITIES)
title_field = soup.find('field', attrs={'name': 'canonicaltitle'})
print title_field.find('fact').string

Desafortunadamente, en lugar de 'H & # 250; rin', imprime 'H & # 195; & # 186; rin'. Obviamente, este es un problema de codificación, pero no puedo resolver lo que necesito hacer para obtener el resultado esperado. La ayuda sería muy apreciada.

¿Fue útil?

Solución

En la fuente de la página web se ve así: The Children of H & amp; Atilde; & amp; ordm; rin . Entonces, la codificación ya está rota en algún lado de su lado antes de que incluso se convierta a XML ...

Si se trata de un problema general con todos los libros y necesita solucionarlo, parece funcionar:

unicode(title_field.find('fact').string).encode("latin1").decode("utf-8")

Otros consejos

La página web puede estar mintiendo sobre su codificación. La salida se parece a UTF-8. Si tiene un str al final, deberá decodificarlo como UTF-8. Si tiene un Unicode, deberá codificar primero como Latin-1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top