2012-01-24 118 views
2

我在python 2.7.1这里使用美丽的汤3.2。UnicodeEncodeError在美丽的汤(python 2.7.1)

我最近一直在试图让一些简单的工作,但它 似乎相当棘手:

我做了以下内容:

temp=BeautifulSoup(urllib2.urlopen(urlList[1], None,15)) 

但是,我得到的错误:

File "/home/foo/k/kat/BeautifulSoup.py", line 1519, in __init__ 
BeautifulStoneSoup.__init__(self, *args, **kwargs) 
File "/home/foo/k/kat/BeautifulSoup.py", line 1144, in __init__ 
self._feed(isHTML=isHTML) 
File "/home/foo/k/kat/BeautifulSoup.py", line 1186, in _feed 
SGMLParser.feed(self, markup) 
File "/usr/lib/python2.7/sgmllib.py", line 104, in feed 
self.goahead(0) 
File "/usr/lib/python2.7/sgmllib.py", line 143, in goahead 
k = self.parse_endtag(i) 
File "/usr/lib/python2.7/sgmllib.py", line 320, in parse_endtag 
self.finish_endtag(tag) 
File "/usr/lib/python2.7/sgmllib.py", line 358, in finish_endtag 
method = getattr(self, 'end_' + tag) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfa' in 
position 4: ordinal not in range(128) 

如果我再次运行同一个循环,有时我也会得到:

File "/home/foo/k/kat/BeautifulSoup.py", line 1519, in __init__ 
BeautifulStoneSoup.__init__(self, *args, **kwargs) 
File "/home/foo/k/kat/BeautifulSoup.py", line 1144, in 
__init__ 
self._feed(isHTML=isHTML) 
File "/home/foo/k/kat/BeautifulSoup.py", line 1186, in _feed 
SGMLParser.feed(self, markup) 
File "/usr/lib/python2.7/sgmllib.py", line 104, in feed 
self.goahead(0) 
File "/usr/lib/python2.7/sgmllib.py", line 143, in goahead 
k = self.parse_endtag(i) 
File "/usr/lib/python2.7/sgmllib.py", line 320, in parse_endtag 
self.finish_endtag(tag) 
File "/usr/lib/python2.7/sgmllib.py", line 358, in finish_endtag 
method = getattr(self, 'end_' + tag) 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 
4-5: ordinal not in range(128) 

如何避免此错误?很明显,sgmllib.py有些问题。

我尝试了一些解决方案,从SOF:

*]尝试soup = BeautifulSoup(page, fromEncoding=<encoding of the page>) 结果:dosent工作,同样的错误。

*尝试将我的sgmllib.py从2.7.2版本升级到我的2.7.1版本 结果:工作量相同,错误相同。

*]试过html = BeautifulSoup(page.encode('utf-8')) 结果:发生工作,发生同样的错误。

我将不胜感激任何有关如何解决此编码错误的建议。

+0

好像你正试图解析页面有一个difffernt编码不是UTF-8。你尝试汤= BeautifulSoup(页面fromEncoding =)与什么? – Bogdan

+0

嗨波格丹,我尝试汤= BeautifulSoup(page,fromEncoding =“utf-8”)但是,我得到了同样的错误。 – JohnJ

+0

你确定你试图解析的页面的编码是“utf-8”吗? – Bogdan

回答

4

试试这个代码的模块中

if __name__ == "__main__": 
    reload(sys) 
    sys.setdefaultencoding("utf-8") 
+0

请原谅我的无知,但“如果你的名字==”main“:” - 这是插入一段代码吗?如果是,我应该在哪里包含这些代码? sys.setdefaultencoding不起作用。 sys.getdefaultencoding返回ascii。 – JohnJ

+0

更新后的代码显示通过格式化进行混淆的正确语法。 –

+1

这是绝对的天才。上面的代码消除了UnicodeEncodeError。我似乎无法理解的是上面的代码是如何工作的。 “if __name__ ==”__main__“:”做什么?你能解释一下吗? – JohnJ