2009-11-09 5 views
5

ich zur Zeit, wie unten gzipped Webseite lesen verwenden mechanisieren:Convert gzipped von urllib2 abgerufenen Daten in HTML

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

Ich frage mich, wie gzip-Daten von urllib2 zu HTML Text geholt zu entpacken?

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 

Antwort

14

Versuchen Sie folgendes:

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

html jetzt den HTML halten sollte (drucken es zu sehen). Weitere Informationen finden Sie unter here.

+0

Sie können auch 'gzip.decompress (data)'. –

+0

Dies funktioniert nicht wirklich in diesem Fall, wie in diesem Artikel erläutert: http://rationalpie.wordpress.com/2010/06/02/python-streaming-gzip-decompression/ so müssen Sie zlib anstelle von gzip verwenden – gabuzo

+0

@ gabuzo Eigentlich betrifft dieser Artikel die _streaming_gzip-Dekomprimierung, die sich tatsächlich sehr von dem Thema dieser Frage unterscheidet, da hier speziell erwähnt wird, dass die Daten bereits abgerufen wurden, während Sie in einer Streaming-Situation dekomprimieren möchten, sobald Sie sie erhalten. –

-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)