网页抓取解密( Python解决内容乱码问题(decode和encode解码)详解整合)

优采云 发布时间: 2021-12-08 23:13

  网页抓取解密(

Python解决内容乱码问题(decode和encode解码)详解整合)

  讲解Python如何解决爬取内容乱码问题(decode和encode解码)

  更新时间:2019-03-29 17:11:51 作者:钱冉_

  本文文章主要介绍Python解决爬取内容乱码(decode和encode解码)的问题。通过示例代码介绍非常详细。对大家的学习或工作,有需要的朋友有一定的参考学习价值。和小编一起学习

  一、乱码问题描述

  在爬取或者执行一些操作的时候,经常会出现中文乱码等问题,如下

  

  原因是源网页编码与爬取后的编码格式不一致

  二、使用encode和decode解决乱码问题

  Python 中字符串的表示是 unicode 编码。编码转换时,通常使用unicode作为中间编码,即其他编码后的字符串先解码为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进行编码会报错

  所以最终可靠的代码:

  

#!/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、检查元素,检查响应头

  

  以上就是小编介绍的解决爬取内容乱码问题(decode和encode解码)的Python详细集成。我希望它会对你有所帮助。如果您有任何问题,请给我留言。小编会及时回复您。. 非常感谢您对脚本之家网站的支持!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线