Python爬虫起步:一步步解决中文乱码显示

来源:互联网 发布:广州简知科技 编辑:程序博客网 时间:2024/06/05 19:31

昨天开始看py爬虫的资料,搞了一晚上还是没搞定,最后发现是挑了个最蛋疼的网站导致的,换个url地址早不知看到哪一章了。为了纪念充实的一天,特意来写一篇博客纪念下。
好吧,首先要说明我挑的是NGA网站 http://nga.178.com/
然后是标准的调用requests抓取页面源代码

最简式:

import requestshtml=requests.get('http://nga.178.com/')print html.text

这是requests的标准用法,能抓取一些最简单的英文网页。返回结果是:
UnicodeEncodeError:‘gbk' codec can't encode character u'/xee' in position 485:illegal multibyte sequence.
简单的说,就是页面中有个字符’/xee’无法解码。
好吧翻了不少帖子之后,才知道不同网站的字符编码是不一样的,此处NGA的源码表示他们用的是GBK编码,与Python2.0默认的Unicode不相同。

#coding=utf-8import requestshtml=requests.get('http://www.zhihu.com/')print html.text

在首行加入声明,调整为utf-8编码格式。此时这个代码已经能抓取部分我们日常使用的网站了,比如知乎。
但是对于NGA,依然是哪个熟悉的
UnicodeEncodeError:‘gbk' codec can't encode character u'/xee' in position 485:illegal multibyte sequence.
此时这个程序依然只能识别utf-8格式的网页,还是不能消化gbk编码的那些网页。
所以,我们需要对其进行重编码

抓+

#coding=utf-8import requestshtml=requests.get('http://www.chiphell.com/')print html.text.encode('GB18030')

在输出时对输出的字符以GB18030的格式进行重编码,因为GB18030>GBK>GB2312,所以对于所有按照GBK编码的网页,使用GB18030是稳妥的。
这里网上有不少人喜欢用

import sysreload(sys)sys.setdefaultencoding('utf-8')

这样的代码,但是参考https://www.v2ex.com/t/163786,这是最不推荐的方式。
用抓++的方式,我们已经可以处理绝大部分的网页,比如我尝试的chihpell,在其源代码中标示编码方式为GBK。
但是回到NGA,我们发现已经能成功的抓取下来代码,但是中文部分不能像chipehll那样正确的显示,而是显示为各种乱码。
于是我在最后的print语句之上加了一句

print html.encoding

来查看NGA的网页到底用的什么编码格式,结果是

ISO-8859-1

传说中的说一套做一套,代码中的’charset=GBK’完全没对上,实际上NGA的页面源代码中是用ISO-8859-1编码格式对中文进行编码的!

抓NGA

#coding=utf-8import requestsurl='http://nga.178.com/'html=requests.get(url)#print html.encodingprint html.text.encode('ISO-8859-1')

终于抓出了NGA的代码,不容易啊,看了大概二十来篇文章,填鸭式学习了一堆关于编码方式、中文编码、print输出的内容,最后发现其实有篇文章里讲到过先识别网页编码格式再做输出的内容。

0 0
原创粉丝点击