美文网首页
爬虫之编码神坑

爬虫之编码神坑

作者: 随风而去_c0e8 | 来源:发表于2018-03-18 00:21 被阅读0次

编码

  我相信大多数做过爬虫项目的人,都会遇到过编码问题,首先我先提一个问题,啥是编码??

编码底层的东西我也不懂,就不细说了。简单的来说:为了让电脑能识别世界上所有语言编写的代码,为每一个文字编写了唯一的编号。


utf-8对应编码

编码种类

    编码的种类非常多像是ASCII,UTF-8,Unicode等等,数不胜数,很无奈,世界上的语言太多了

怎么解决编码问题

  在python这样包容性强大的第三方库里没有解决不了的事情。

为了一劳永逸解决编码的问题,chardet这个第三方库正好就派上了用场。用它来检测编码,简单易用。

使用chardet

一劳永逸的办法

r=requests.get(url)
print(r.content.decode(chardet.detect(r.content)['encoding']))

当我们拿到一个bytes时,就可以对其检测编码。用chardet检测编码,只需要一行代码:

chardet.detect(b'Hello, world!')
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}

检测出的编码是ascii,注意到还有个confidence字段,表示检测的概率是1.0(即100%)。

我们来试试检测GBK编码的中文:

data = '离离原上草,一岁一枯荣'.encode('gbk')
chardet.detect(data)
{'encoding': 'GB2312', 'confidence': 0.7407407407407407, 'language': 'Chinese'}

检测的编码是GB2312,注意到GBK是GB2312的超集,两者是同一种编码,检测正确的概率是74%,language字段指出的语言是'Chinese'。

对UTF-8编码进行检测:

data = '离离原上草,一岁一枯荣'.encode('utf-8')
chardet.detect(data)
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}

我们再试试对日文进行检测:

data = '最新の主要ニュース'.encode('euc-jp')
chardet.detect(data)
{'encoding': 'EUC-JP', 'confidence': 0.99, 'language': 'Japanese'}

可见,用chardet检测编码,使用简单。获取到编码后,再转换为str,就可以方便后续处理。

chardet支持检测的编码列表请参考官方文档Supported encodings

decode和encode

我经常把这两个函数搞晕,感觉长的都挺像的,哈哈
请参考以下文章 decode和encode的区别

text和content

请参考以下文章 text和content的区别

相关文章

  • 爬虫之编码神坑

    编码 编码底层的东西我也不懂,就不细说了。简单的来说:为了让电脑能识别世界上所有语言编写的代码,为每一个文字编写了...

  • 解决使用request库爬取内容出现乱码的问题

    刚开始爬虫经常会被编码问题坑,今天看了python的requests库的官方文档和几种常见编码的关系,在这里做个简...

  • Jekyll 编译后head标签里面的内容错位到body中

    Jekyll神坑 先说说百度到的最多的说法: 文件编码格式问题:UTF-8 without BOM自己检测文件编码...

  • Python_by_4plus_Week0(1)

    Python爬虫之Week0 再次入坑 小白又来给自己挖坑了。上次是Python 2期,这次是爬虫,没错,还是Py...

  • 写爬小说的爬虫的一些心得

    最近用 Node.js 写了爬某小说的爬虫,发现坑还是满多的。 网页中文乱码 小说网站的页面内容编码用的 GBK,...

  • 2020-05-13

    react-native中遇到的坑 神坑React Native之react-native-vector-icon...

  • scrapy 爬虫之坑

    scrapy 的 field 可以设置任何类型 可以先创建一个数组变量 test = [] 然后将test赋值给f...

  • ppt内容

    1、base64图片编码解码 2、爬虫遭遇StackPath反爬的应对之策3、JS逆向之某货车公共平台模拟免登陆 ...

  • 爬虫编码问题

    环境 python版本: 3.5.0编辑器: vscode,用code runner插件运行抓取网页:新浪首页 代...

  • 爬虫&编码

    写爬虫,尤其时抓取中文页面,总是不可避免的要和不同的编码打交道。最常用的UTF-8,GBK,如果抓取时返回的是二进...

网友评论

      本文标题:爬虫之编码神坑

      本文链接:https://www.haomeiwen.com/subject/nxusqftx.html