【问题标题】:BeautifulSoup error 'charmap' codec can't encode character [duplicate]BeautifulSoup错误'charmap'编解码器无法编码字符[重复]
【发布时间】:2016-03-26 00:26:18
【问题描述】:

这是我目前拥有的代码

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())

理论上它应该向google发送一个请求,取回文本并使用beautifulsoup的prettify()方法

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

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

print(soup.prettify())

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

找到解决方案

解决方案不是使用 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)

【问题讨论】:

  • 问题是你的shell编码,cmd基本上是垃圾。如果我是你,我会省去很多麻烦并安装 cygwin cygwin.com 或使用一个像样的 ide
  • 你会推荐什么ide?​​span>
  • 请放心,pycharm,他们有免费的社区版

标签: python web beautifulsoup python-requests


【解决方案1】:

当您的终端/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 模块的一种滥用,但如果您正在编写一个不是非常复杂的程序,那么它会在紧要关头工作。

【讨论】:

  • 好吧,当你使用任何一种方法时,它会给你什么错误?
  • 首先我将#coding=utf8 添加到我的程序顶部,同样的错误。 i.imgur.com/vppHB5A.png
  • 试试第二种方法
  • 然后我尝试了 sys 部分。我得到这个问题“NameError: name 'reload' is not defined.i.imgur.com/svNj5lc.png
  • 在快速检查python3中出现错误之后。试试from imp import reload
猜你喜欢
  • 1970-01-01
  • 2015-11-21
  • 2015-01-21
相关资源
最近更新 更多