详解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列表与元组详解实例
Nov 01 Python
python获取网页状态码示例
Mar 30 Python
Python中使用ConfigParser解析ini配置文件实例
Aug 30 Python
举例讲解Python中的Null模式与桥接模式编程
Feb 02 Python
python图片验证码生成代码
Jul 02 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
Oct 21 Python
Python中字符串List按照长度排序
Jul 01 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
Aug 12 Python
Python测试线程应用程序过程解析
Dec 31 Python
python 密码学示例——凯撒密码的实现
Sep 21 Python
pytorch 运行一段时间后出现GPU OOM的问题
Jun 02 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的5个入手程序
2006/11/23 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
2019/10/15 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
用javascript获取textarea中的光标位置
2008/05/06 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
js innerHTML 改变div内容的方法
2013/08/03 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
TypeScript入门-接口
2017/03/30 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
js实现延迟加载的几种方法详解
2019/01/19 Javascript
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
anaconda如何查看并管理python环境
2019/07/05 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
C#实现启动一个进程
2016/10/01 面试题
《我不是最弱小的》教学反思
2014/02/23 职场文书
任命书模板
2014/06/04 职场文书
消防安全宣传标语
2014/06/07 职场文书
党员国庆节演讲稿范文2014
2014/09/21 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL