这是我目前的代码
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())
每次我运行此代码时都会遇到编解码器错误。这是确切错误的屏幕截图
找到解决方案
解决方案是使用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)
答案 0 :(得分:0)
当您的终端/ powershell无法打印出从BeautifulSoup收到的任何字符时,就会发生这种情况。两种解决方法,首先要比第二种更好:
# coding=<encoding name>
或# -*- coding: <encoding name> -*-
来声明python应该使用的编码
你会把shebang线放在哪里。不是推荐的方法 - 在python脚本的开头,
import sys
reload(sys)
sys.setdefaultencoding('utf8') # or whichever one you want to use.
这是不推荐使用的方法,因为它实际上是对sys模块的误用,但是如果你编写的程序并不复杂,那就可以解决这个问题。