我正在使用美丽的汤来刮取数据。 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? p>
如何从BS获取Unicode对象?
我真的,真的迷失了。有帮助吗?提前谢谢。
答案 0 :(得分:4)
您可能已经注意到renderContent返回(默认情况下)以UTF-8编码的字符串,但是如果您真的想要一个表示整个文档的Unicode字符串,您还可以执行unicode(汤)或解码renderContents / prettify的输出使用unicode(soup.prettify(),“utf-8”)。
相关强>
答案 1 :(得分:2)
originalEncoding
就是 - 源编码,因此BS在内部将所有内容存储为unicode这一事实不会改变该值。当您遍历树时,所有文本节点都是unicode,所有标签都是unicode等,除非您另外转换它们(例如使用print
,str
,prettify
或{ {1}})。
尝试做类似的事情:
renderContents
不幸的是,到目前为止你所做的其他事情都发现了BS中转换为字符串的极少数方法。