来自Python urllib2的奇怪输出

时间:2015-06-14 06:38:35

标签: python html python-2.7 urllib2 urllib

我想阅读使用urllib2的网页源代码;但是,我看到了一个我以前从未见过的奇怪输出。这是代码(Python 2.7,Linux):

import urllib2
open_url = urllib2.urlopen("http://www.elegantthemes.com/gallery/")
site_html = open_url.read()
site_html[50:]

给出了输出:

'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xe5\\ms\xdb\xb6\xb2\xfel\xcf\xe4?\xc0<S[\x9a\x8a\xa4^\xe28u,\xa5\x8e\x93\xf4\xa4\x93&\x99:9\xbdw\x9a\x8e\x07"'

有谁知道为什么它会将其显示为输出而不是正确的HTML?

1 个答案:

答案 0 :(得分:2)

网站发送的http响应实际上是gzip压缩内容,因此是奇怪的输出。 urllib不会自动解码gzip cntent。有两种方法可以解决这个问题 -

1)在打印前解码压缩内容 -

import urllib2
import io
import gzip

open_url = urllib2.urlopen("http://www.elegantthemes.com/gallery/")
site_html = open_url.read()
bi = io.BytesIO(site_html)
gf = gzip.GzipFile(fileobj=bi, mode="rb")
s = gf.read()
print s[50:]

2)使用Requests库 -

import requests
r = requests.get('http://www.elegantthemes.com/gallery/')
print r.content