网站内容抓取( Python解决内容乱码问题(decode和encode解码)详解整合)
优采云 发布时间: 2022-02-06 11:03网站内容抓取(
Python解决内容乱码问题(decode和encode解码)详解整合)
详解Python解决乱码问题(decode和encode解码)
更新时间:2019-03-29 17:11:51 作者:钱然_
本文章主要介绍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里面写的是你要抓取的网页的code,encode是你要设置的code
代码显示如下
#!/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编码会报错
所以最终可靠的代码:
#!/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、检查元素,见响应头
以上就是小编为大家介绍的Python解决乱码内容(decode和encode解码)问题的详细讲解和集成。我希望它对你有帮助。如有任何问题,请给我留言,小编会及时回复您。. 还要感谢大家对脚本之家网站的支持!