这是我的代码:
soup = bs4.BeautifulSoup(res.text, "html.parser")
linkElems = soup.select('.r a')
for i in range(len(linkElems)):
t = linkElems[i].findAll(text=True)
print(t)
这给了我错误:
Traceback(最近一次调用最后一次):文件“C:\ Path \ Python \ code.py”, 第17行,in print(t)文件“C:\ Program Files \ Python 3.5 \ lib \ encodings \ cp437.py”,第19行,编码 return codecs.charmap_encode(input,self.errors,encoding_map)[0] UnicodeEncodeError:'charmap'编解码器不能编码字符'\ u2014'in 位置9:字符映射到
第print(t)
行给了我错误。
我正在使用Python 3和Beautiful Soup 4.我怎样才能摆脱这个错误?
答案 0 :(得分:0)
打开文件时,使用的是CP437编码,该编码在您的操作系统上(未指定)为默认编码。
CP437在检查文件时遇到一个无法编码的字符(您未指定2014年Unicode字符,无论是十六进制还是十进制)。
因此,它会出错,告诉您它无法对字符进行编码。
解决此问题的方法是将编码更改为UTF-8,因为它可以解码所有Unicode字符,并且可能是文件真正编码的内容,因为UTF-8在世界范围内都在使用。
要将其更改为UTF-8,请使用以下代码:
soup = bs4.BeautifulSoup(res.text, "html.parser", encoding="utf-8")
。
这会将编码更改为UTF-8(因为我添加了encoding="utf-8"
),因此,它现在执行的是C:\Program Files\Python 3.5\lib\encodings\cp437.py
,它可以正确编码,而不是执行C:\Program Files\Python 3.5\lib\encodings\utf8.py
进行编码。