使用Python解码HTML实体

时间:2009-03-09 22:47:02

标签: python unicode encoding utf-8 beautifulsoup

以下Python代码使用BeautifulStoneSoup为Tolkien的“Húrin的孩子们”获取LibraryThing API信息。

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'。这显然是一个编码问题,但我无法弄清楚我需要做什么来获得预期的输出。非常感谢帮助。

2 个答案:

答案 0 :(得分:4)

在网页的来源中,它看起来像这样:The Children of Húrin。所以编码在它甚至被转换为XML之前就已经被打破了......

如果这是所有书籍的一般问题,你需要解决它,这似乎有效:

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

答案 1 :(得分:1)

网页可能在谈论其编码。输出看起来像UTF-8。如果你最后有一个str,那么你需要将其解码为UTF-8。如果你有一个unicode,那么你需要首先编码为Latin-1。