一、乱码问题描述

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

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

二、利用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解码)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

python爬取小说出现乱码_详解Python解决抓取内容乱码问题(decode和encode解码)相关推荐

  1. python中list[1啥意思_详解Python中list[::-1]的几种用法

    本文主要介绍了Python中list[::-1]的几种用法,分享给大家,具体如下: s = "abcde" list的[]中有三个参数,用冒号分割 list[param1:para ...

  2. python调用cmd命令释放端口_详解python调用cmd命令三种方法

    目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码, ...

  3. python中有那几种赋值_详解Python列表赋值复制深拷贝及5种浅拷贝

    概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值.复制.浅拷贝.深拷贝等绕口的名词到底有什么区别和作用呢? 列表赋值 # 定义一个新 ...

  4. python正则匹配空格+数字+空格_详解Python中正则匹配TAB及空格的小技巧

    详解Python中正则匹配TAB及空格的小技巧 发布时间:2020-10-15 08:38:48 来源:脚本之家 阅读:94 作者:杰瑞26 在正则中,使用.*可以匹配所有字符,其中.代表除\n外的任 ...

  5. python中yaml模块的使用_详解Python yaml模块

    一.yaml文件介绍 yaml是一个专门用来写配置文件的语言. 1. yaml文件规则 区分大小写: 使用缩进表示层级关系: 使用空格键缩进,而非Tab键缩进 缩进的空格数目不固定,只需要相同层级的元 ...

  6. python中fp是什么意思_详解python实现FP-TREE进行关联规则挖掘(带有FP树显示功能)附源代码下载(3)...

    详解python实现FP-TREE进行关联规则挖掘(带有FP树显示功能)附源代码下载(3) 上一节简单讲了下FP树的生成,在这一节我将描述FP树的挖掘过程. 首先我们回顾一下要挖掘的特征项及样本空间: ...

  7. python中filepath路径怎么写_详解Python中的路径问题

    1. 绝对路径引入 Python 在搜索模块时,依次搜索sys.path里的位置,直到找到模块为止.下面命令可以查看当前的搜索路径: import sys print(sys.path) sys.pa ...

  8. python中什么是可变参数_详解Python的三种可变参数

    详解Python的三种可变参数 可变参数 可变参数应该最简单,在C/C++和Java等语言中都有,就是用*号来表示,例如 def testArg(*arg) 你可以传入任意多个元素(包括0)到参数中, ...

  9. stata抓取html,(5)详解 stata 爬虫抓取网页上的数据 part 1

    *案例:抓取 http://www.tjcn.org 中国统计信息网上前50页(每页包含20个市的数据)的1000个地区的GDP数据.使用stata版本为 stata13,与12版本和14版本都不兼容 ...

最新文章

  1. 特斯拉全新自动驾驶芯片最强?英伟达回怼,投资者用脚投票
  2. 求1+2+3+…+n
  3. EntityFramework SaveChange()方法不能更新的问题
  4. 安装Exchange2013,FMS服务无法达到启动状态
  5. 3.ELK 之elasticsearch CRUD
  6. 前端一HTML:三: 浏览器页面的本质-html,html语言规则
  7. 99%网工都会遇到的10道经典面试问题
  8. 基于Python预测股价的那些人那些坑,请认真看完!
  9. 处理大并发之二 对epoll的理解,epoll客户端服务端代码
  10. 一个简单易用的导出Excel类
  11. iis设置服务器文件权限设置,iis7如何配置写入权限以上传文件---急急急
  12. 常量池在堆还是方法区_详解Java 虚拟机(第③篇)——String 类和常量池
  13. Unity实现爆炸的伤害值计算
  14. FISCO BCOS 区块链应用开发步骤
  15. 【深入浅出精华版视频】-刘意day13思维导图整理
  16. 湖南计算机保密防范系统,保密技术防护专用系统
  17. 用计算机能打出什么歌,这样用计算机些歌谱?
  18. 量子计算机九章骗局,200秒完成6亿年工作,量子计算机“九章”到底有多牛?...
  19. 2023联发科实习春招秋招内推内推码面经总结
  20. 神策数据:数字化营销助力鞋服企业转型

热门文章

  1. Android 贴纸样式标签
  2. 从底层重学 Java 之四大整数 GitChat链接
  3. SQLServer 生成当前日期备份
  4. Android程序杀死自己的进程和其他程序进程方法
  5. k型热电偶材料_电热汇分享热电偶测温元件符号、标准及参数详解
  6. note.. redis五大数据类型
  7. (三)Neo4j自带northwind案例--Cypher语言应用
  8. 褚时健:现在的年轻人太急了,我快90了还在摸爬滚打
  9. 【C++的深度剖析教程20】类型转换函数上
  10. Nginx----基础