这是我的代码:
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)
这给了我错误:
回溯(最近一次调用最后一次):文件“C:\ Path \ Python \ code.py”,第17行,在print(t)文件“C:\ Program Files \ Python 3.5 \ lib \ encodings \ cp437.py”中,第19行,编码返回codecs.charmap_encode(输入,self.errors,encoding_map)[0] UnicodeEncodeError:'charmap'编解码器不能编码位置9的字符'\ u2014':字符映射到
print(t)
行给了我错误 .
我正在使用Python 3和Beautiful Soup 4.我怎样才能摆脱这个错误?
1 回答
当您打开文件时,您使用的是编码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
,它正确编码 .