来自 Python urllib2 的奇怪输出

Strange Output from Python urllib2

我想使用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?

站点发送的 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