首页 文章

UnicodeEncodeError:'charmap' codec can 't encode character ' \ u2014'Python Beautiful Soup

提问于
浏览
0

这是我的代码:

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 回答

  • 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 ,它正确编码 .

相关问题