Python在進行網頁抓取時,有時會獲取到經過gzip壓縮后的數據(體積小,傳輸快),導致無法閱讀和使用。
如圖所示,為http原始報文。可以看到,header區域的“Content-Encoding: gzip”標明了正文是經過gzip壓縮后的數據,而body區域藍色框里面的數據即是gzip的數據源(至於body區域其它額外的字符,可能是一些輔助標記,這里不做關心)。
至於為什么我們從瀏覽器打開網頁時是可讀的文字,是因為瀏覽器自動幫我們進行了解壓。
那么,如何通過編程方式進行gzip解壓呢?幸運的是,python標准庫zlib自帶了gzip格式的解壓相關函數。
如下圖所示,通過python自帶的zlib包,即可完成對壓縮數據的解壓。
至於最后的那個參數為何是“zlib.MAX_WBITS+16”,是因為zlib不是單純用來處理gzip的,gzip的數據格式決定了要使用這個值;也就是說如果zlib處理其它的壓縮格式,這個值就會變化。
參考下文:
http://stackoverflow.com/questions/1838699/how-can-i-decompress-a-gzip-stream-with-zlib