2009-03-09 4 views
0

Следующий код Python использует BeautifulStoneSoup для получения информации об API LibraryThing для Толкиена «The Children of Húrin».Декодирование HTML-объектов с помощью Python

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 

К сожалению, вместо «Húrin» он печатает «Húrin». Это, очевидно, проблема с кодировкой, но я не могу решить, что мне нужно сделать, чтобы получить ожидаемый результат. Помощь будет принята с благодарностью.

ответ

4

В источнике веб-страницы это выглядит так: The Children of Húrin. Таким образом, кодирование уже сломана где-то на их стороне, прежде чем он даже преобразуется в XML ...

Если это общая проблема со всеми книгами, и вы должны работать вокруг него, это похоже на работу:

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

Yup, я думаю, это все. Я связался с LibraryThing по поводу его сортировки. Благодарю. :) –

1

Веб-страница может лежать о ее кодировании. Результат выглядит как UTF-8. Если вы получили строку в конце, вам нужно будет декодировать ее как UTF-8. Если у вас есть unicode, тогда вам нужно сначала закодировать как Latin-1.