详解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 相关文章推荐
Python3中常用的处理时间和实现定时任务的方法的介绍
Apr 07 Python
用Python进行TCP网络编程的教程
Apr 29 Python
Python 模板引擎的注入问题分析
Jan 01 Python
python执行使用shell命令方法分享
Nov 08 Python
Python 调用PIL库失败的解决方法
Jan 08 Python
python PrettyTable模块的安装与简单应用
Jan 11 Python
python 怎样将dataframe中的字符串日期转化为日期的方法
Sep 26 Python
Python爬虫程序架构和运行流程原理解析
Mar 09 Python
Django更新models数据库结构步骤
Apr 01 Python
jupyter 使用Pillow包显示图像时inline显示方式
Apr 24 Python
python如何调用php文件中的函数详解
Dec 29 Python
Python必备技巧之函数的使用详解
Apr 04 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对数组排序代码分享
2014/02/24 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
解决浏览器会自动填充密码的问题
2017/04/28 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
深入浅析JS中的严格模式
2018/06/04 Javascript
Vue CLI2升级至Vue CLI3的方法步骤
2019/05/20 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
Python修改Excel数据的实例代码
2013/11/01 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
python中字符串内置函数的用法总结
2018/09/13 Python
Python tkinter的grid布局及Text动态显示方法
2018/10/11 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
python从Oracle读取数据生成图表
2020/10/14 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
小学语文业务学习材料
2014/06/02 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
交通事故案件代理词
2015/05/23 职场文书
董事长秘书工作总结
2015/08/14 职场文书
2016年社区党支部公开承诺书
2016/03/25 职场文书
企业管理不到位检讨书
2019/06/27 职场文书
java基础——多线程
2021/07/03 Java/Android
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL