2009-11-09 6 views
5

J'utilise actuellement mécaniser lire page Web gzip comme ci-dessous:Convertir des données récupérées par gzip urllib2 en HTML

br = mechanize.Browser() 
br.set_handle_gzip(True) 
response = br.open(url) 
data = response.read() 

Je me demande comment décompresser les données récupérées par gzip urllib2 au texte HTML?

req = urllib2.Request(url) 
opener = urllib2.build_opener() 
response = opener.open(req) 
data = response.read() 
if response.info()['content-encoding'] == 'gzip': 
    HOW TO DECOMPRESS DATA TO HTML 

Répondre

14

Essayez ceci:

import StringIO 
data = StringIO.StringIO(data) 
import gzip 
gzipper = gzip.GzipFile(fileobj=data) 
html = gzipper.read() 

html doit maintenant tenir le HTML (Imprimer pour voir). Voir here pour plus d'informations.

+0

Vous pouvez également faire 'gzip.decompress (data)'. –

+0

Cela ne fonctionne pas réellement dans ce cas comme expliqué dans cet article: http://rationalpie.wordpress.com/2010/06/02/python-streaming-gzip-decompression/ donc vous devez utiliser zlib au lieu de gzip – gabuzo

+0

@ gabuzo En fait, cet article concerne la décompression _streaming_ gzip, qui est en effet très différente du sujet de cette question, puisque celle-ci mentionne spécifiquement que les données ont déjà été récupérées, alors que dans une situation de streaming, vous voulez les décompresser. –

-2
def ungzip(r,b): 
    headers = r.info() 
    if ('Content-Encoding' in headers.keys() and headers['Content-Encoding']=='gzip') or \ 
     ('content-encoding' in headers.keys() and headers['content-encoding']=='gzip'): 
     import gzip 
     gz = gzip.GzipFile(fileobj=r, mode='rb') 
     html = gz.read() 
     gz.close() 
     headers['Content-type'] = 'text/html; charset=utf-8' 
     r.set_data(html) 
     b.set_response(r) 
Questions connexes