BeautifulSoup不给我Unicode

时间:2010-07-07 07:18:26

标签: python unicode character-encoding beautifulsoup

我正在使用美丽的汤来刮取数据。 BS文档声明BS应该总是返回Unicode,但我似乎无法获得Unicode。这是一段代码片段

import urllib2
from libs.BeautifulSoup import BeautifulSoup

# Fetch and parse the data
url = 'http://wiki.gnhlug.org/twiki2/bin/view/Www/PastEvents2007?skin=print.pattern'

data = urllib2.urlopen(url).read()
print 'Encoding of fetched HTML : %s', type(data)

soup = BeautifulSoup(data)
print 'Encoding of souped up HTML : %s', soup.originalEncoding 

table = soup.table
print type(table.renderContents())

页面返回的原始数据是一个字符串。 BS将原始编码显示为ISO-8859-1。我认为BS会自动将所有内容转换为Unicode,所以当我这样做时为什么呢?

table = soup.table
print type(table.renderContents())

..它给了我一个字符串对象而不是Unicode?

如何从BS获取Unicode对象?

我真的,真的迷失了。有帮助吗?提前谢谢。

2 个答案:

答案 0 :(得分:4)

您可能已经注意到renderContent返回(默认情况下)以UTF-8编码的字符串,但是如果您真的想要一个表示整个文档的Unicode字符串,您还可以执行unicode(汤)或解码renderContents / prettify的输出使用unicode(soup.prettify(),“utf-8”)。

相关

答案 1 :(得分:2)

originalEncoding就是 - 源编码,因此BS在内部将所有内容存储为unicode这一事实不会改变该值。当您遍历树时,所有文本节点都是unicode,所有标签都是unicode等,除非您另外转换它们(例如使用printstrprettify或{ {1}})。

尝试做类似的事情:

renderContents

不幸的是,到目前为止你所做的其他事情都发现了BS中转换为字符串的极少数方法。