今天在用Python2.7爬取百度百科的一个网页时发现输出时中文为乱码。
尝试一:
查看网页页面信息,发现其中文字编码为“GBK”,遂准备对其进行解码。
content = urllib2.urlopen(url).read().decode('gbk').encode('utf-8')
报错UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 3681-3682: illegal multibyte sequence
尝试二:
百度之后发现有人说可能是网页信息是被gzip压缩的,需要先解压缩
import gzip, StringIO
html = gzip.GzipFile(fileobj=StringIO.StringIO(html), mode="r")
html = html.read().decode('gbk').encode('utf-8’)
报错说文本未被压缩
尝试三(成功):
偶然间看到网上有个代码在decode中加了第二个参数’ignore’,尝试了下竟然成功了,原来是文本中有不属于gbk的编码,之前遇到时就会报错,但其实那些地方无关紧要,需要的信息正确就好。
content = urllib2.urlopen(url).read().decode('gbk','ignore').encode('utf-8')
另附:判断文本真实编码的代码:
import chardet
print chardet.detect(content)['encoding']