在Python中使用BeautifulSoup处理编码问题

2 投票
2 回答
1467 浏览
提问于 2025-04-17 09:19

这个页面是用UTF-8编码的,用Python的HTMLParser解析的时候一切正常,没有出现UnicodeDecodeError的错误。但是当我用BeautifulSoup来解析时,就出现了错误。我尝试了在各个地方加上_*_编码:utf-8 _*_,还有用.encode('utf-8'),但还是出现了错误。

import urllib
from BeautifulSoup import BeautifulSoup
args=urllib.urlencode({'keywords':'magic'})
doc=urllib.urlopen('http://www.example.com/submit', args)
soup=BeautifulSoup(doc)
stuff = soup.findAll('section',id='banner')
print stuff

Traceback (most recent call last):
      File "test.py", line 7, in <module>
        print stuff
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xed' in position 112: ordinal not in range(128)

2 个回答

0

你在打印的时候不应该遇到 UnicodeEncodeError: 'ascii'.. 这样的错误。这种情况通常是因为你的 locale 设置有问题,或者被设置成了 C。这样一来,Python 就无法在输出流上使用合适的编码。

你可以运行 locale 命令,看看有没有错误或警告。

如果你无法修复你的 locale 设置,通常可以通过在环境中设置 PYTHONIOENCODING 来覆盖 Python 的输出编码,选择一个与你的终端模拟器匹配的编码。通常你可以使用:

export PYTHONIOENCODING=UTF-8

或者

PYTHONIOENCODING=UTF-8 python my_script.py
3

好的,我在最后一次尝试中找到了解决办法,也许这对遇到同样问题的人有帮助。

需要进行编码,而不是解码。

print( [e.encode('utf-8', 'ignore') for e in stuff] )

撰写回答