详解Python解决抓取内容乱码问题(decode和encode解码)


Posted in Python onMarch 29, 2019

一、乱码问题描述

经常在爬虫或者一些操作的时候,经常会出现中文乱码等问题,如下

详解Python解决抓取内容乱码问题(decode和encode解码)

原因是源网页编码和爬取下来后的编码格式不一致

 二、利用encode与decode解决乱码问题

字符串在Python内部的表示是unicode编码,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。

encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘utf-8'),表示将unicode编码的字符串str2转换成utf-8编码。

decode中写的就是想抓取的网页的编码,encode即自己想设置的编码

代码如下

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: xulinjie time:2017/10/22
import urllib2

request=urllib2.Request(r'http://nhxy.zjxu.edu.cn/')
RES=urllib2.urlopen(request).read()
RES = RES.decode('gb2312').encode('utf-8')//解决乱码
wfile=open(r'./1.html',r'wb')
wfile.write(RES)
wfile.close()
print RES

或者

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: xulinjie time:2017/10/22
import urllib2

request=urllib2.Request(r'http://nhxy.zjxu.edu.cn/')
RES=urllib2.urlopen(request).read()
RES=RES.decode('gb2312')
RES=RES.encode('utf-8')
wfile=open(r'./1.html',r'wb')
wfile.write(RES)
wfile.close()
print RES

但是还要注意:
如果一个字符串已经是unicode了,再进行解码则将出错,因此通常要对其编码方式是否为unicode进行判断

isinstance(s, unicode)#用来判断是否为unicode

用非unicode编码形式的str来encode会报错

所以最终可靠代码:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: xulinjie time:2017/10/22
import urllib2

request=urllib2.Request(r'http://nhxy.zjxu.edu.cn/')
RES=urllib2.urlopen(request).read()

if isinstance(RES, unicode):
 RES=RES.encode('utf-8')
else:
 RES=RES.decode('gb2312').encode('utf-8')

wfile=open(r'./1.html',r'wb')
wfile.write(RES)
wfile.close()
print RES

详解Python解决抓取内容乱码问题(decode和encode解码)

三、如何找到需要抓取的目标网页的编码格式

1、查看网页源代码

详解Python解决抓取内容乱码问题(decode和encode解码)

如果源代码中没有charset编码格式显示可以用下面的方法

2、检查元素,查看Response Headers

详解Python解决抓取内容乱码问题(decode和encode解码)

以上所述是小编给大家介绍的Python解决抓取内容乱码问题(decode和encode解码)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python中OrderedDict的使用方法详解
May 05 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
用matplotlib画等高线图详解
Dec 14 Python
python中闭包Closure函数作为返回值的方法示例
Dec 17 Python
分析运行中的 Python 进程详细解析
Jun 22 Python
python爬虫 模拟登录人人网过程解析
Jul 31 Python
代码总结Python2 和 Python3 字符串的区别
Jan 28 Python
Python简单实现词云图代码及步骤解析
Jun 04 Python
PyCharm 2020.2 安装详细教程
Sep 25 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
浅谈Python响应式类库RxPy
Jun 14 Python
Pytest中conftest.py的用法
Jun 27 Python
详解python读取和输出到txt
Mar 29 #Python
Python实现账号密码输错三次即锁定功能简单示例
Mar 29 #Python
详解Python函数式编程—高阶函数
Mar 29 #Python
python实现AES加密与解密
Mar 28 #Python
python实现计数排序与桶排序实例代码
Mar 28 #Python
python实现AES和RSA加解密的方法
Mar 28 #Python
python简单实现AES加密和解密
Mar 28 #Python
You might like
VFP与其他应用程序的集成
2006/10/09 PHP
PHP爆绝对路径方法收集整理
2012/09/17 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
PHP_Cooikes不同页面无法传递的解决方法
2014/03/07 PHP
ThinkPHP5&5.1框架关联模型分页操作示例
2019/08/03 PHP
JS 自动安装exe程序
2008/11/30 Javascript
使用jQuery同时控制四张图片的伸缩实现代码
2013/04/19 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
js剪切板应用clipboardData实例解析
2016/05/29 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
js css实现垂直方向自适应的三角提示菜单
2016/06/26 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
JS实现间歇滚动的运动效果实例
2016/12/22 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
2018/10/29 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
js通过循环多张图片实现动画效果
2019/12/19 Javascript
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
如何使用python爬取csdn博客访问量
2016/02/14 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
Python用5行代码实现批量抠图的示例代码
2020/04/14 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
《乌塔》教学反思
2014/02/17 职场文书
《狼和小羊》教学反思
2014/04/20 职场文书
党员自评材料范文
2014/12/17 职场文书
2014年党总支工作总结
2014/12/18 职场文书
党员违纪检讨书
2015/05/05 职场文书
上甘岭观后感
2015/06/10 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书