详解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 socket网络编程步骤详解(socket套接字使用)
Dec 06 Python
python实现判断数组是否包含指定元素的方法
Jul 15 Python
用virtualenv建立多个Python独立虚拟开发环境
Jul 06 Python
详解Python map函数及Python map()函数的用法
Nov 16 Python
python使用百度文字识别功能方法详解
Jul 23 Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 Python
详解python uiautomator2 watcher的使用方法
Sep 09 Python
pytorch下大型数据集(大型图片)的导入方式
Jan 08 Python
浅析python 字典嵌套
Sep 29 Python
python中openpyxl和xlsxwriter对Excel的操作方法
Mar 01 Python
有趣的二维码:使用MyQR和qrcode来制作二维码
May 10 Python
Python中的turtle画箭头,矩形,五角星
Mar 16 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
用PHP动态创建Flash动画
2006/10/09 PHP
第八节--访问方式
2006/11/16 PHP
apache php模块整合操作指南
2012/11/16 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
获取DOM对象的几种扩展及简写
2006/10/09 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
javascript获取文档坐标和视口坐标
2015/05/26 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
javascript表单验证大全
2015/08/12 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
BootStrap selectpicker后台动态绑定数据的方法
2017/07/28 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
解决vue项目 build之后资源文件找不到的问题
2020/09/12 Javascript
Windows下Python2与Python3两个版本共存的方法详解
2017/02/12 Python
利用PyInstaller将python程序.py转为.exe的方法详解
2017/05/03 Python
Django自定义认证方式用法示例
2017/06/23 Python
Python实现注册登录系统
2017/08/08 Python
python编程线性回归代码示例
2017/12/07 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
2019/07/01 Python
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
.NET初级开发工程师面试题(包括Javascript)
2012/08/22 面试题
洗车工岗位职责
2014/03/15 职场文书
社区清明节活动总结
2014/07/04 职场文书
乡镇党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
学校班子个人对照检查材料思想汇报
2014/09/27 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript