是什么让python webscrape输出unicode?

时间:2015-05-19 02:17:35

标签: python unicode beautifulsoup

我正在玩BeautifulSoup刮一张桌子及其内容,我注意到我根据我的结果得到了不同的输出 - 如果我打印它,我得到一个没有unicode符号的输出。

html = urlopen('http://www.bcsfootball.org').read()
soup = BeautifulSoup(html)

for row in soup('table', {'class':'mod-data'})[0].tbody('tr'):
    tds = row('td')
    print tds[0].string, tds[1].string

给出:

1 Florida State
2 Auburn
3 Alabama
4 Michigan State
5 Stanford

依此类推( btw,是否有一种简单的方法,如.head()或索引来限制行输出的数量?

但是当我在括号中包裹最后一行时,

print (tds[0].string, tds[1].string)

或为该行指定一个变量,然后打印变量

output = tds[0].string, tds[1].string
print output

我在unicode中得到了输出:

(u'1', u'Florida State')
(u'2', u'Auburn')
(u'3', u'Alabama')
(u'4', u'Michigan State')
(u'5', u'Stanford')

这里发生了什么?提前谢谢。

2 个答案:

答案 0 :(得分:3)

对象的repr()输出与其str()输出之间的差异。我还注意到你使用的是Python 2.X,其中print是一个关键字:

>>> s=u'M\xfcrk'
>>> print s        # Formatted for output display
Mürk
>>> print repr(s)  # Formatted to view type and content
u'M\xfcrk'
>>> s              # It is what you get by default at interactive prompt
u'M\xfcrk'

请注意,repr版本可以查看字符串中不可打印的字符,或者无法在当前终端上显示可能的字符。

当您使用括号打印时,Python 2.X认为您正在打印tuple。显示列表和元组等序列时,默认情况下会显示repr版本的字符串:

>>> print (s)       # NOT a tuple, so seems to work
Mürk
>>> print (s,)      # A 1-tuple
(u'M\xfcrk',)
>>> print (s,1,2)   # A 3-tuple
(u'M\xfcrk', 1, 2)
>>> print s,1,2     # prints normally.
Mürk 1 2

答案 1 :(得分:0)

实际上,你的所有输出都是unicodes。默认情况下,Beautifulsoup根据其doc转换为unicode。

当您使用括号和tuple时,也打印output对象。并且在直接使用时只使用解码。