看完上面的内容,我相信大家应该已经掌握了字符编码的所有秘密 。不管编码格式是什么,在什么地方执行,大家始终记住那两个关于乱码的原则,问题一定会迎刃而解 。接下来,我们再看看更多实际的例子 。
比如,我们在使用爬虫爬取网页时,也会经常遇到乱码,如果结合上面讲的原则,大家是否能够知道问题出在哪,并且解决这些问题呢?我们以网易和百度这两个网站为例,给大家看看会有什么样的问题 。首先来看看网易的首页,打开源码,我们可以看到,网页首页的编码格式是gbk的 。
文章插图
编码格式gbk意味着,如果我们需要对抓取的网页内容进行解码的话,必须指定解码方式为gbk才能正常解码为Unicode类型的字符串 。假定我们使用的是py3,如果使用默认的decode()方法,将默认解码为utf8,肯定是会报错的 。比如下面的代码,我们先抓取163的首页内容,并用正则取出页面的title,代码如下:
文章插图
这里为什么会报错呢?因为resp.content实际上是抓取的网页的原始字符串,是以gbk编码的二进制内容,所以我们需要知道这个字符串的编码方式才能正确地进行解码 。从网页中我们可以知道,该网页的编码为gbk编码方式,所以我们decode时必须指定gbk作为解码的方式(如果decode中不指定解码方式的话,默认以utf8来解码),所以我们应该改为下面这样就可以正确拿到我们的结果:
文章插图
而对于百度首页,其网页编码方式是utf8的,所以我们在解码时就不用再专门指定utf8格式了,直接decode即可,大家可以自己试试 。
本文到这里终于可以结束了,内容确实不少,因为要搞明白编码的问题,我们需要知道很多东西,这是我们必须要掌握的 。另外,很多资料和书籍上都会写到,在py2的脚本中指定编码方式时,必须在脚本开头的位置写coding:utf8,想必大家读完此文应该知道这种说法是对的还是错的了 。这就是学习的价值,为什么我们要抠原理、抓本质,就是让我们有足够的能力和底气去判断和质疑一个问题的对和错,只有这样,你的技术才能真正进步,让你去解决?更多的问题 。最后,希望大家以后再也不会受到乱码问题的困扰了 。?
推荐阅读
- 柚子教大家如何用python做精美的照片墙!五分钟学会get新技能
- 优化Python代码的4种方法
- 如何通过“import”语句确定在Python中导入了哪个文件?详解
- python脚本实现音频m4a格式转成MP3格式
- 一文搞懂 PHP 数组的真正用法
- 一篇文章教你搞定脚本监控
- 一文读懂,“算法”究竟是个啥?
- 看了这一文,你可以彻底认识锂电池的使用了
- 一个非常简单的 Python IPTV 客户端
- Python中的条件判断、循环以及循环的终止