Python 筆記六:入門(mén)爬蟲(chóng)坑--網(wǎng)頁(yè)數(shù)據(jù)壓縮(python deflate gzip)

Python 筆記六:入門(mén)爬蟲(chóng)坑--網(wǎng)頁(yè)數(shù)據(jù)壓縮

源碼github地址在此栅组,記得點(diǎn)星:
https://github.com/brandonxiang/get_html_deflate_gzip


做項(xiàng)目就伴隨著一個(gè)問(wèn)題--數(shù)據(jù)來(lái)源日川。在網(wǎng)絡(luò)數(shù)據(jù)獲取的過(guò)程红柱,考慮到數(shù)據(jù)的動(dòng)態(tài)下載需要爬蟲(chóng)。這也是必經(jīng)之路吧。

我在運(yùn)用urllib2做相當(dāng)簡(jiǎn)單的爬蟲(chóng)入門(mén)實(shí)驗(yàn)的時(shí)候,出現(xiàn)編碼以及壓縮等問(wèn)題。這一個(gè)坑很多人踩過(guò)踊兜,甚至有人處理編碼問(wèn)題會(huì)出現(xiàn)一種情況,就是5分鐘開(kāi)發(fā)完成棵里,25分鐘處理編碼問(wèn)題润文。更不用說(shuō)數(shù)據(jù)壓縮姐呐,數(shù)據(jù)會(huì)面目全非。網(wǎng)頁(yè)壓縮主要兩種典蝌,區(qū)別可參考gzip和deflate的幾點(diǎn)區(qū)別曙砂。

在這里用python舉個(gè)栗子,小項(xiàng)目骏掀,用urllib2爬網(wǎng)頁(yè)十分簡(jiǎn)單鸠澈。

data = urllib2.urlopen(url).read()

網(wǎng)上有各種各樣的解決數(shù)據(jù)壓縮的方法。但是都沒(méi)有很完美的解決方案截驮。有些講的是deflate笑陈,有的講的是gzip。事實(shí)上葵袭,網(wǎng)頁(yè)壓縮技術(shù)采用deflate的網(wǎng)站已經(jīng)很少涵妥,由于國(guó)內(nèi)落后的網(wǎng)站還有一個(gè)很大保有量,特別是一些政府企事業(yè)的網(wǎng)站坡锡。我希望能提供一種兩全齊美的解決方案蓬网。

deflate

import zlib
def deflate(data): 
    try:               
        return zlib.decompress(data, -zlib.MAX_WBITS)
    except zlib.error:
        return zlib.decompress(data)

兩種壓縮格式的解壓方法有很大的差異。

gzip

from gzip import GzipFile
from StringIO import StringIO
def gzip(data):
    buf = StringIO(data)
    f = gzip.GzipFile(fileobj=buf)
    return f.read()

將兩者結(jié)合寫(xiě)成一個(gè)整合方法

通過(guò)對(duì)Content-Encoding屬性的判斷鹉勒,將兩個(gè)方法結(jié)合在一起帆锋。

import urllib2
from gzip import GzipFile
from StringIO import StringIO
import zlib

def loadData(url):
    request = urllib2.Request(url)
    request.add_header('Accept-encoding', 'gzip,deflate')
    response = urllib2.urlopen(request)
    content = response.read()
    encoding = response.info().get('Content-Encoding')
    if encoding == 'gzip':
        content = gzip(content)
    elif encoding == 'deflate':
        content = deflate(content)
    return content

def gzip(data):
    buf = StringIO(data)
    f = gzip.GzipFile(fileobj=buf)
    return f.read()

def deflate(data):
    try:
        return zlib.decompress(data, -zlib.MAX_WBITS)
    except zlib.error:
        return zlib.decompress(data)

def main():
    url = "http://www.szxuexiao.com/"
    content = loadData(url)
    print content

if __name__ == '__main__':
    main()

轉(zhuǎn)載,請(qǐng)表明出處禽额。總目錄Awesome GIS

轉(zhuǎn)載锯厢,請(qǐng)表明出處。總目錄后端記事本

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脯倒,一起剝皮案震驚了整個(gè)濱河市实辑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盔憨,老刑警劉巖徙菠,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異郁岩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)缺狠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)问慎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人挤茄,你說(shuō)我怎么就攤上這事如叼。” “怎么了穷劈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵笼恰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)卫病,這世上最難降的妖魔是什么乌妒? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮追葡,結(jié)果婚禮上腺律,老公的妹妹穿的比我還像新娘。我一直安慰自己宜肉,他們只是感情好匀钧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著谬返,像睡著了一般之斯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遣铝,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天吊圾,我揣著相機(jī)與錄音,去河邊找鬼翰蠢。 笑死项乒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梁沧。 我是一名探鬼主播檀何,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼廷支!你這毒婦竟也來(lái)了频鉴?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恋拍,失蹤者是張志新(化名)和其女友劉穎垛孔,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體施敢,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡周荐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了僵娃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片概作。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖默怨,靈堂內(nèi)的尸體忽然破棺而出讯榕,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布愚屁,位于F島的核電站济竹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏霎槐。R本人自食惡果不足惜送浊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望栽燕。 院中可真熱鬧罕袋,春花似錦、人聲如沸碍岔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蔼啦。三九已至榆纽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捏肢,已是汗流浹背奈籽。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸵赫,地道東北人衣屏。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像辩棒,于是被迫代替她去往敵國(guó)和親狼忱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容