【问题标题】:Convert gzipped data fetched by urllib2 to HTML将 urllib2 获取的 gzipped 数据转换为 HTML
【发布时间】:2010-12-14 20:30:53
【问题描述】:

我目前使用 mechanize 读取 gzipped 网页如下:

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

我想知道如何将 urllib2 获取的 gzipped 数据解压缩为 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

【问题讨论】:

    标签: python gzip urllib2


    【解决方案1】:

    试试这个:

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

    html 现在应该保存 HTML(打印以查看)。请参阅here 了解更多信息。

    【讨论】:

    • 你也可以gzip.decompress(data).
    • 这实际上在这种情况下不起作用,如本文所述:rationalpie.wordpress.com/2010/06/02/… 所以你必须使用 zlib 而不是 gzip
    • @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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-13
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 2021-08-31
      • 1970-01-01
      • 2021-05-06
      相关资源
      最近更新 更多