Python用Scrapy爬虫报错UnicodeEncodeError: 'gbk' codec can't encode character '\u2022' ,解决方案

news/2024/10/29 2:39:59/
错误:UnicodeEncodeError: 'gbk' codec can't encode character '\u2022' in position 7: illegal multibyte sequence
解决:import ioimport syssys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')

从网上抓取网站写下面这段代码时,发现报UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX 错误

from urllib import request
req=request.Request("https://www.baidu.com")
req.add_header("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:51.0) Gecko/20100101 Firefox/51.0")
resp=request.urlopen(req)
print(resp.read().decode('utf-8'))

查了一下发现了解决办法原来是print()函数自身有限制,不能完全打印所有的unicode字符。

其实print()函数的局限就是Python默认编码的局限,因为系统是win7的,python的默认编码不是'utf-8',改一下python的默认编码成'utf-8'就行了

import io  
import sys 
from urllib import request
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码
req=request.Request("https://www.baidu.com")
req.add_header("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:51.0) Gecko/20100101 Firefox/51.0")
resp=request.urlopen(req)
print(resp.read().decode('utf-8'))

虽然可以解决了报错,但发现中文乱码,原来是cmd编码的不兼容utf-8,若要解决这问题,改一下python的默认编码成'gb18030'就行了

 

sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')         #改变标准输出的默认编码 

转载自:https://blog.csdn.net/qq_28359387/article/details/54974578


http://www.ppmy.cn/news/520069.html

相关文章

U-Net网络变形综述

U-Net网络变形综述 U-Net and its variants for Medical Image Segmentation : A short review Abstract 本文简要回顾了U-Net及其变体在医学图像分割中的应用。据我们所知,对任何一位临床医生,无论是放射科医生还是病理学家来说,检查医学…

redmi K30 5G拆解

原网址 https://zhuanlan.zhihu.com/p/113479252 在19年这个5G元年,虽然多家品牌发布5G手机,但整体价格都偏高,直到红米K30 5G以最低1999的价格闯进了市场。想必有和小e同样好奇,K30会不会为控制成本,而“偷工减料”呢…

Python爬虫处理\xa0、\u3000、\u2002、\u2003等空格

Python爬虫处理\xa0、\u3000、\u2002、\u2003等空格 导读空格类型普通半角空格普通全角空格(\u3000)html实体不间断空格(\xa0)html实体半角空格(\u2002)html实体全角空格(\u2003)统一处理方式 导读 在爬取网页时,对网页…

在Ubuntu下安装jdk解压出现问题:./jdk-6u30-linux-i586.bin: 113: ./install.sfx.3631: not found

在Ubuntu下安装jdk解压出现问题:./jdk-6u30-linux-i586.bin: 113: ./install.sfx.3631: not found。 Failed to extract the files. Please refer to the Troubleshooting section of the Installation Instructions on the download page for more information 网…

python中前缀u_Python字符串前缀u、r、b、f含义

1、字符串前加 u 例子: u"字符串中有中文" 含义: 前缀u表示该字符串是unicode编码,Python2中用,用在含有中文字符的字符串前,防止因为编码问题,导致中文出现乱码。另外一般要在文件开关标明编码方式采用utf8。 Python3中,所有字符串默认都是unicode字符串。 2…

Ubuntu11.10下安装 jdk-6u30-linux-i586.bin[转]

JDK:Linux X86下SUN公司的 jdk-6u30-linux-i586.bin 下载JDK。下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u30-download-1377139.html ,选择Linux X86下的 jdk-6u30-linux-i586.bin. 首先把JDK拷贝到指定的目录&#xff…

Serv-U 15.1.2安装使用

Serv_U软件下载 安装文件:SU-FTP-Server-Windows-v15.1.2 注册文件:Patcher v2.3.1 for Serv-U v15.x.x.x 百度云盘链接: 链接:https://pan.baidu.com/s/1Poyh80oTxhJ3znZ3ZnZn4Q 提取码:rx30 安装步骤 安装过程 …

工行u盾显示316_工行U盾常见故障处理

一、常见故障现象 U盾连接电脑后,指示灯不闪烁 系统无法识别U盾 系统将U盾识别为“未知设备” U盾管理工具中显示U盾工作状态不正常、不工作 使用管理工具无法看到证书信息 出现错误信息“Reader PCSC Driver Error” 管理工具显示介面为英文 IE中无法看到证书信息 重启机器后…