2009-11-09 16 views
5

HTML में डेटा मैं वर्तमान में नीचे के रूप में Gzipped वेब पेज पढ़ने के लिए मशीनीकरण का उपयोग करें:Convert gzipped urllib2 द्वारा दिलवाया

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

मुझे आश्चर्य है कि HTML पाठ के लिए urllib2 द्वारा दिलवाया Gzipped डेटा को संपीड़ित करने के लिए कैसे?

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 

उत्तर

14

इस प्रयास करें:

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

html अब एचटीएमएल (प्रिंट यह देखने के लिए) धारण करना चाहिए। अधिक जानकारी के लिए here देखें।

+0

आप बस 'gzip.decompress (डेटा)' भी कर सकते हैं। –

+0

यह वास्तव में इस आलेख में वर्णित इस मामले में काम नहीं कर रहा है: http://rationalpie.wordpress.com/2010/06/02/python-streaming-gzip-decompression/ तो आपको gzip – gabuzo

+0

के बजाय zlib का उपयोग करना होगा @ gabuzo असल में, यह आलेख _streaming_ gzip डिकंप्रेशन से संबंधित है, जो वास्तव में इस प्रश्न के विषय से बहुत अलग है, क्योंकि यह विशेष रूप से उल्लेख करता है कि डेटा पहले से ही प्राप्त किया गया था, जबकि एक स्ट्रीमिंग स्थिति में आप इसे प्राप्त करने के रूप में डिकंप्रेस करना चाहते हैं। –

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