当前位置:首页 > 旅游指南

乱码怎么办 浅入深出 | 网站爬取时出现乱码该怎么办

最近有粉丝找我咨询。在抓取网站时,网页的源代码看起来像是中文乱码。之前有很多粉丝对乱码爬虫的各种质疑。今天总结一下web爬虫的乱码处理。注意这里不仅仅是中文乱码,还有一些日文、韩文、俄文、藏文等乱码。,因为它们的解是一样的,所以在这里统一解释。

第一,乱码问题的出现

以爬行51job网站为例,谈谈为什么会出现“乱码”,如何解决,以及背后的机制。

代码示例:

import requestsurl = "http://search.51job.com"res = requests.get(url)print(res.text)

显示结果:

可以发现Requests推测的文本编码(即网页返回或爬下后的编码转换)与源网页编码不一致,是导致代码乱码的原因。

二、乱码背后的神秘

当源网页编码与抓取后的代码转换不一致时,比如源网页是gbk编码的字节流,程序抓取后直接使用utf-8编码输出到存储文件,必然会造成乱码,即当源网页编码与程序抓取后直接使用的代码一致时,就不会出现乱码,统一字符编码时也不会出现乱码。无论什么编码格式,所有抓取的网页都转换成utf-8格式存储。

注意:区分源网络代码A-gbk,程序直接使用的代码B-ISO-8859-1,统一转换字符的代码C-utf-8。

在这里,我们将扩展unicode、ISO-8859-1、gbk2312、gbk、utf-8等之间的区别。,大致如下:

最早的编码是iso8859-1,类似于ascii编码。然而,为了方便地表达各种语言,许多标准代码逐渐出现。Iso8859-1属于单字节编码,能表达的字符最大范围为0-255,应用于英文系列。显然iso8859-1编码的字符范围比较窄,不能代表汉字。

1981年,中国人通过对中文ASCII码的扩展和转换,产生了GB2312码,可以代表6000多个常用汉字。但是汉字太多了,包括繁体字和各种各样的字,于是产生了GBK码,其中包括了GB2312中的码,扩展了很多。中国也是一个多民族国家,几乎所有的民族都有自己独立的语言体系。为了表达这些字符,我们继续将GBK代码扩展到GB18030代码。每个国家和中国一样,都有自己的语言编码,所以有各种各样的代码。如果不安装相应的代码,就无法解释相应的代码想要表达什么。最后,一个叫ISO的组织再也受不了了。他们一起创建了一个UNICODE代码,它非常大,可以容纳世界上任何单词和符号。所以只要电脑上有UNICODE编码系统,不管世界上是什么样的字符,只需要保存文件,保存为UNICODE代码,其他电脑就可以正常解释。UNICODE在网络传输中,有两种标准UTF-8和UTF-16,分别传输8位和16位。那么有人会问,既然UTF-8能保存这么多字符和符号,为什么中国还有这么多人用GBK等代码?因为UTF-8等码比较大,占电脑数量很大空,如果大部分用户是中国人,用GBK等码也可以。

也可以这样理解:字符串由字符组成,字符以二进制形式存储在计算机硬件中,这就是代码。如果直接使用“字符串的二进制表示(编码)”,会增加不同类型编码之间转换的复杂度。所以引入了一个抽象层,“独立于存储的字符串的二进制表示(编码)”,使得字符可以以一种独立于存储的形式表达,不同的编码可以先转换到这个抽象层,再转换到其他编码形式。这里,unicode是“独立于存储的表示”,UTF-8是“二进制表示”。

第三,乱码的解决方案

根据原因找到解决办法很简单。

方法1:直接指定res.encoding

import requestsurl = "http://search.51job.com"res = requests.get(url)res.encoding = "gbk"html = res.textprint(html)

方法2:通过res .表观编码属性指定

import requestsurl = "http://search.51job.com"res = requests.get(url)res.encoding = res.apparent_encodinghtml = res.textprint(html)

方法3:通过编码和解码

import requestsurl = "http://search.51job.com"res = requests.get(url)html = res.text.encode('iso-8859-1').decode('gbk')print(html)

输出结果:

基本思路由三个步骤组成:确定源网页编码A - gbk,程序通过编码B-ISO-8859-1还原源网页数据,统一转换字符编码C-utf-8。至于为什么有统一的转码步骤?网络爬虫系统中有很多数据源。如果无法使用数据,它将被转换为其原始数据,如果这样做是浪费的。所以一般爬虫系统要对抓取的结果进行统一编码,做到一致,使用方便。

比如我们要说网页数据保存了,会转换成utf-8,代码如下:

with open("a.txt",'w',encoding='utf-8') as f:f.write(html)

四.总结

对于web爬虫的乱码,本文不仅给出了解决方案,还深入探讨了其原理,引出了很多有趣的问题,比如,utf-8、gbk、gb2312的编码方式是什么?为什么这种转化可以解决问题?

最后,多动脑筋,多思考,多总结,给每一个码农!

本文转自公众号:恋习Python(ID:sldata2017)本文版权归原作者所有,内容为作者个人观点,转载目的在于传递更多信息,如涉及作品内容、版权等问题,可联系本站删除,谢谢。

更多交流咨询:18080942131(带微信加好友备注:搜狐)。

1.《乱码怎么办 浅入深出 | 网站爬取时出现乱码该怎么办》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《乱码怎么办 浅入深出 | 网站爬取时出现乱码该怎么办》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/1041469.html

上一篇

报名费4000元!央视曝剑桥英语考试天价考位黑幕 官方回应

下一篇

视睿电子 鸿合科技遭视源股份1.43亿元专利诉讼

删不掉的文件 电脑的残留文件删除不了?只要输入一代码!不用杀毒软件就能清理

删不掉的文件 电脑的残留文件删除不了?只要输入一代码!不用杀毒软件就能清理

我相信大多数用户在删除软件时没有清理残留文件。所以在查询内存空的时候,我们会发现我们的硬盘空被很多未知文件占用了。为了解决这个问题,本文将与大家分享在没有杀毒软件的情况下清理电脑残留文件的教程。  3.然后单击“文件”并选择“另存为”  4.“另存为”窗口打开后,输入“删除文件残留”。在“文...

考研帮网页版 考研生,一根笔,还是一台电脑方便?

  • 考研帮网页版 考研生,一根笔,还是一台电脑方便?
  • 考研帮网页版 考研生,一根笔,还是一台电脑方便?
  • 考研帮网页版 考研生,一根笔,还是一台电脑方便?
娜美游戏 lol源代码娜美在哪领 源代码娜美领取方法介绍

娜美游戏 lol源代码娜美在哪领 源代码娜美领取方法介绍

源码Nami是lol源码系列中的一款皮肤,特效非常好。最近LOL服务器波动,官方直接发玩家皮肤。很多玩家想知道LOL源码Nami从哪里来。以下小系列带攻略。来享受加一个吧! 源码Nami是lol源码系列中的一款皮肤,特效非常好。最近LOL服务器波动,官方直接发玩家皮肤。很多玩家想知道LOL源...

网页上有错误怎么解决 如何优雅处理前端异常?

网页上有错误怎么解决 如何优雅处理前端异常?

前端一直是离用户最近的一层。随着产品的改进,我们会更加注重用户体验,但是前端异常总是令人讨厌。  4.接下来,我们来试试异常网络请求: window. = function(message, source, lineno, colno, error) {console.log('捕获到异...

口袋妖怪漆黑的魅影金手指代码 《口袋妖怪漆黑的魅影》金手指大全

口袋妖怪漆黑的魅影金手指代码 《口袋妖怪漆黑的魅影》金手指大全

在口袋妖怪的黑暗魅影里,很多朋友觉得钱不够,孵蛋太长,等等。这个时候很多朋友都想用金手指解决这些问题,那我们就来看看口袋妖怪的黑暗魅影吧。  [穿墙] C518E2595ADBAF5B [传送] 020322E4:XXXX(xxxx是位置代码) [快速升级] 020241F0:2710 【金...

网页窗口最大化 Google Chrome 最实用的30个键盘快捷键

网页窗口最大化 Google Chrome 最实用的30个键盘快捷键

Chrome浏览器是外贸界最常用的浏览器之一。熟练使用Chrome浏览器高速上网,会大大提高你的工作效率。  如果需要跳转到特定页面,请按下命令键并选择适当的数字。例如,如果您需要跳转到第七个打开的选项卡,请按下Command键并添加数字7。如果您需要跳回第二个打开的标签,请按下Comman...

在线屏幕尺子 网页设计尺寸

在线屏幕尺子 网页设计尺寸

网页的设计尺寸是多少?我们来看看。  网页设计尺寸 制作网页时我们选择的分辨率是72像素/英寸,使用的画布尺寸是1920px*1080px。但这并不意味着我们可以在整个画布上画画。 网页主要有两种布局:左右布局和中心布局。布局不一致,使得可设计空不一样。 左右结构型 1.左右布局,灵活性强,...

木马网站 网页木马的免杀

  • 木马网站 网页木马的免杀
  • 木马网站 网页木马的免杀
  • 木马网站 网页木马的免杀