【发布时间】:2020-04-28 11:08:47
【问题描述】:
import bs4 as bs
import urllib.request
sauce = urllib.request.urlopen('https://stats.swehockey.se/Teams/Info/TeamRoster/10333').read()
soup = bs.BeautifulSoup(sauce, 'lxml')
print(soup)
此代码产生以下错误
UnicodeEncodeError: 'ascii' codec can't encode character '\xbb' in position 1509: ordinal not in range(128)
我尝试了几种解决方法,但它们都有一些缺点。在stackoverflow上搜索后,我找到了更改.stdout的解决方案,如下所示:
import bs4 as bs
import urllib.request
import sys
import codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
sys.stderr = codecs.getwriter('utf-8')(sys.stderr)
sauce = urllib.request.urlopen('https://stats.swehockey.se/Teams/Info/TeamRoster/10333').read()
soup = bs.BeautifulSoup(sauce, 'lxml')
print(soup)
我不再收到错误,但是输出不再指向终端。我不确定为什么会这样。使用.prettify('utf-8') 方法也可以消除错误并产生输出,但是,结果对象是一个字符串,而不是一个漂亮的汤对象,因此没有任何关联的 bs 方法(例如 .find_all())。 .encode('utf-8') 方法也会出现类似的问题。
另外,我注意到在输出中,漂亮的汤对象中仍然有许多 \r 和 \n 字符,而不是纯 html 内容。
我想要一个漂亮的汤对象,没有任何可以打印到终端的 \r 或 \n 字符。
【问题讨论】:
标签: python unicode beautifulsoup