详解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获取当前时间的方法
Jan 14 Python
python判断给定的字符串是否是有效日期的方法
May 13 Python
python numpy函数中的linspace创建等差数列详解
Oct 13 Python
python 读写中文json的实例详解
Oct 29 Python
python实现BackPropagation算法
Dec 14 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
Jan 23 Python
基于Django统计博客文章阅读量
Oct 29 Python
python 实现多维数组(array)排序
Feb 28 Python
python对execl 处理操作代码
Jun 22 Python
Scrapy项目实战之爬取某社区用户详情
Sep 17 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
Dec 16 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
Jun 23 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
网站当前的在线人数
2006/10/09 PHP
smarty section简介与用法分析
2008/10/03 PHP
php短网址和数字之间相互转换的方法
2015/03/13 PHP
Yii框架上传图片用法总结
2016/03/28 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
又一个小巧的图片预加载类
2007/05/05 Javascript
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
React中使用外部样式的3种方式(小结)
2019/05/28 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
Python 通配符删除文件的实例
2018/04/24 Python
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
Python Django 实现简单注册功能过程详解
2019/07/29 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
下载官网python并安装的步骤详解
2019/10/12 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
python数据分析:关键字提取方式
2020/02/24 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
2020/04/08 HTML / CSS
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
运动会稿件300字
2014/02/14 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS