BeautifulSoup错误' charmap'编解码器无法对字符

时间:2016-03-26 00:26:18

标签: python web beautifulsoup python-requests

这是我目前的代码

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36'}
r = requests.get("http://www.google.com", headers=headers)
page_text = r.text
soup = BeautifulSoup(page_text, 'html.parser')
print(soup.prettify())

理论上它应该向谷歌发送请求,获取文本并使用beautifulsoup的美化方法()

这是他们的示例代码(来自http://www.crummy.com/software/BeautifulSoup/bs4/doc/#getting-help

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')

print(soup.prettify())

每次我运行此代码时都会遇到编解码器错误。这是确切错误的屏幕截图

enter image description here

找到解决方案

解决方案是使用print()而不是使用堆栈交换成员中的此print方法。

def uprint(*objects, sep=' ', end='\n', file=sys.stdout):
    enc = file.encoding
    if enc == 'UTF-8':
        print(*objects, sep=sep, end=end, file=file)
    else:
        f = lambda obj: str(obj).encode(enc, errors='backslashreplace').decode(enc)
        print(*map(f, objects), sep=sep, end=end, file=file)

1 个答案:

答案 0 :(得分:0)

当您的终端/ powershell无法打印出从BeautifulSoup收到的任何字符时,就会发生这种情况。两种解决方法,首先要比第二种更好:

  1. PEP 0263中引用,您可以通过键入# coding=<encoding name># -*- coding: <encoding name> -*-来声明python应该使用的编码 你会把shebang线放在哪里。
  2. 不是推荐的方法 - 在python脚本的开头,

    import sys
    reload(sys)
    sys.setdefaultencoding('utf8') # or whichever one you want to use.
    

    这是不推荐使用的方法,因为它实际上是对sys模块的误用,但是如果你编写的程序并不复杂,那就可以解决这个问题。