问题描述
在使用Python编写爬虫爬取淘宝页面数据时,遇到编码错误,具体问题如下。
爬虫代码:
……
request = urllib2.Request(url,headers = headers)
response = urllib2.urlopen(request)
return response.read().decode('gbk')
……
执行代码到return这一行的时候报错:
UnicodeDecodeError: 'gbk' codec can't decode bytes in position 1-2: illegal multibyte sequence
仔细检查代码没有发现错误,淘宝页面的编码也是gbk,后面才发现是由于淘宝将网页用gzip进行了压缩。
在浏览器调试窗口查看Network
> Response Headers
,可以发现以下内容:
content-encoding:gzip
解决方案
对爬取到的网页内容进行gzip解压后再进行解码。
1.引入以下两个包
from StringIO import StringIO
import gzip
2.修改headers,添加accept-encoding属性
……
request.add_header('accept-encoding', 'gzip')
……
3.进行解压和解码
……
request = urllib2.Request(url,headers = headers)
request.add_header('accept-encoding', 'gzip')
response = urllib2.urlopen(request)
strBuf = StringIO(response.read())
gzf = gzip.GzipFile(fileobj=strBuf)
return gzf.read().decode('gbk')
……