python中encode中文自定义编码(详解Python解决抓取内容乱码问题decode和encode解码)
python中encode中文自定义编码
详解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 |
三、如何找到需要抓取的目标网页的编码格式
1、查看网页源代码
如果源代码中没有charset编码格式显示可以用下面的方法
2、检查元素,查看response headers
以上所述是小编给大家介绍的python解决抓取内容乱码问题(decode和encode解码)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!
原文链接:https://blog.csdn.net/w_linux/article/details/78370218
- python 正则表达式在代码里的使用(python中正则表达式与模式匹配)
- 怎么在当前目录调用python库(Python父目录、子目录的相互调用方法)
- python 操作html(Python HTML解析模块HTMLParser用法分析爬虫工具)
- python怎样读取mysql数据(使用Python将Mysql的查询数据导出到文件的方法)
- 用python实现atm银行系统(Python实现的银行系统模拟程序完整案例)
- python爬微信好友(python抓取需要扫微信登陆页面)
- python实现将txt转化为excel(python实现Excel文件转换为TXT文件)
- python中if判断数据类型(基于python if 判断选择结构的实例详解)
- mysql怎么做教材信息管理系统(python+mysql实现学生信息查询系统)
- python 怎么解析中文(Python中一般处理中文的几种方法)
- python dict 操作(Python中dict和set的用法讲解)
- python的opencv图片识别(OpenCV-Python 摄像头实时检测人脸代码实例)
- python 常用模块函数(Python OOP类中的几种函数或方法总结)
- python的多线程比多进程效率高(Python中单线程、多线程和多进程的效率对比实验实例)
- python将网站图片本地存储(详解Python下载图片并保存本地的两种方式)
- python ssh 连接(python pexpect ssh 远程登录服务器的方法)
- 萌娃唱《白龙马》走红,那生动的小表情,网友直呼 简直是戏精(萌娃唱白龙马走红)
- 朱鹤松被不断认可,凤凰传奇玲花喊话岳云鹏,索要老朱演出门票(朱鹤松被不断认可)
- 元宵晚会槽点多,芒果台上来就假唱,岳云鹏不说相声改评书了(元宵晚会槽点多)
- 岳云鹏跟凤凰传奇谈心,说出了人生中最重要的三个人,这才成功(岳云鹏跟凤凰传奇谈心)
- 爱情可以当饭吃吗(爱情能当饭吃吗)
- Top 3 JSHS《运动与健康科学 英文 》跻身SCI体育学期刊世界前三(Top3JSHS运动与健康科学)
热门推荐
- dedecms怎么加入模板(dedecms 列表页标题修改图文方法利于优化)
- mysql查询逗号分割字符串(MySQL 字符串拆分实例无分隔符的字符串截取)
- iis运行php程序(Windows2003+IIS7 Express使用FastCgi运行php)
- python中test函数用法(Python TestCase中的断言方法介绍)
- dedecms提示怎么去除(DEDECMS系统后台会员功能漏洞解决方法)
- ASP.NET mvc异常处理的方法
- 宝塔面板端口一般设置多少合适(宝塔面板设置了防盗链不生效如何解决)
- Visual Studio使用Git进行源代码管理
- 用php实现弹出消息提示框(php弹出提示框的是实例写法)
- mysql数据库丢失怎么办(MySQL 数据丢失排查案例)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9