在写爬虫抓取网页时,通过下面代码可以将网页代码抓取回来,一般直接就是HTML的相关网页代码。
data = urllib2.urlopen(url).read()
但有时,返回的是一些看不懂的数据。
这是通过Fiddler抓取回来的数据,其实在上面这个截图中就可以看到,这个数据是被encoded过的,点击Response body is encoded.Click to decode.即可解密:
deocde后,就可以看到HTML代码:
其实,这些数据是被压缩过的,而网页压缩一般有2种方式:
deflate 和 gzip,但实际上deflate已经比较过时了。
在通过爬虫抓取后,需要对数据进行解压缩,才能看到相应的网页代码,这时,可以通过下面的python代码进行解压缩:
import urllib2
from gzip import GzipFile
from StringIO import StringIO
import zlib
def loadData(url):
request = urllib2.Request(url)
request.add_header('Accept-encoding', 'gzip,deflate')
response = urllib2.urlopen(request)
content = response.read()
encoding = response.info().get('Content-Encoding')
if encoding == 'gzip':
content = gzip(content)
elif encoding == 'deflate':
content = deflate(content)
return content
def gzip(data):
buf = StringIO(data)
f = gzip.GzipFile(fileobj=buf)
return f.read()
def deflate(data):
try:
return zlib.decompress(data, -zlib.MAX_WBITS)
except zlib.error:
return zlib.decompress(data)
def main():
url = "http://www.xxx.com/"
content = loadData(url)
print content
if __name__ == '__main__':
main()