解决爬虫中文数据乱码问题 |
您所在的位置:网站首页 › 请问脊柱弯了是什么原因 › 解决爬虫中文数据乱码问题 |
常见的问题
在爬虫爬取数据过程中直接爬取数据中文字符出现乱码现象 最早的编码是iso8859-1和ascii编码类似,iso8859-1属于单字节编码,最多能表示的字符范围是0-255,仅能应用于英文,无法表示中文。 1981年中国对ascii编码进行了扩充改造,产生了GB2312编码,它可以表示6000多个常用汉字,但是由于汉字的繁多经过演进改造产生了GBK编码,它包括GB2312中的很多编码,同时也进行了扩充。由于中国语言汉字的样式多,很多民族都有自己的语言,为了表示那些汉字继续把GBK编码扩充为GB18030编码。 但是这样出现了问题,每个国家都有了自己的编码,编码形式繁多如果要使用相应的语言必须安装相应的编码,否则就无法进行正常显示。与之ISO创造了一种UNICODE编码,这种编码非常大,可以保存世界上的任何文字和符号。 UNICODE在传输中出现了两个标准UTF-8和UTF-16,分别是每次传输8位和16位,但是UTF-8等编码体积比较大,占用电脑空间内存,如果面向的使用人群大多是是中国人那么GBK编码是可以用的。 字符串是由字符构成的,字符在计算机硬件中通过二进制存储,这种二进制就是编码,如果直接使用“字符串->字符->二进制”进行表示,会增加不同类型编码之间转换的复杂性,所以引入了一个抽象层"字符串->字符->与存储无关的表示->二进制表示",这样可以用一种与存储无关的形式表示字符,不同的编码之间转换时先转到这个抽象层,然后再转为其他的形式,unicode就是与存储无关的形式,utf-8就是二进制表示。 解决方法方法一:直接指定res.encoding import requests url = "http://search.51job.com" res = requests.get(url) res.encoding = "gbk" html = res.text print(html)方法二:通过res.apparent_encoding指定 import requests url = "http://search.51job.com" res = requests.get(url) res.encoding = res.apparent_encoding html = res.text print(html)方法三:通过编码、解码的方式 import requests url = "http://search.51job.com" res = requests.get(url) html = res.text.encode('iso-8859-1').decode('gbk') print(html) 总结基本思路:确定源网页的编码A和程序通过编码B,对源网页数据进行还原,统一转换字符编码C,一般爬取数据时都需要进行统一编码,方便使用。 with open("a.txt",'w',encoding='utf-8') as f: f.write(html)参考资料 python爬虫的中文乱码问题:https://www.zhihu.com/question/27062410 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |