2009-03-09 19 views
0

次のPythonコードでは、BeautifulStoneSoupを使用して、Tolkienの "The Hulin of Children"のLibraryThing API情報を取得します。PythonでHTMLエンティティをデコードする

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'の代わりに 'Hrinin'が表示されます。これは明らかにエンコードの問題ですが、期待される出力を得るためには何が必要なのか分かりません。ヘルプは非常に高く評価されます。

答えて

4

ウェブページのソースでは、The Children of Húrinのようになります。だから、それはでも、XMLに変換される前に、エンコーディングはすでに彼らの側にどこか壊れている...

それはすべての書籍で一般的な問題だとあなたはそれを回避する必要がある場合は、これが動作しているようです:

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

うん、そうだね。私はそれを整理するためにLibraryThingに連絡しました。ありがとう。 :) –

1

ウェブページがそのエンコーディングについて嘘をついている可能性があります。出力はUTF-8のように見えます。最後にstrがある場合は、UTF-8としてデコードする必要があります。代わりにUnicodeを使用している場合は、まずLatin-1としてエンコードする必要があります。

関連する問題