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字符。