爬蟲學習筆記(三)——下載一個網(wǎng)站download函數(shù)

一.下載網(wǎng)頁
1.版本1.0:

from urllib.request import urlopen
def download(url):                          
    html=urlopen(url).read()
    return html

2.不簡潔隘庄,不直觀所以有了升級
版本1.1:

def download(url):
    print('Downloading:',url)
    return urlopen(url).read()

3.當獲取網(wǎng)頁時有錯誤時,防止崩潰
版本2.0:

def download(url):
    print('Downloading:',url)
    try:
        html=urlopen(url).read()
    except Exception as e:
        html=None
        print('Download error:',e.reason)
    return html

4.一般有兩種錯誤碼404或者5(2是正常)癣亚,其中有時下載會出現(xiàn)5**丑掺,表示服務(wù)器異常,這個時候希望重新連接述雾。(404表示請求網(wǎng)頁不存在街州,一般再訪問也沒結(jié)果)
版本2.1(實現(xiàn)重新連接):

def download(url,num_retry=2):
    print('Downloading:',url)
    try:
        html=urlopen(url).read()
    except Exception as e:
        html=None
        print('Download error:',e.reason)
        if num_retry>0:
            if hasattr(e,'code') and 500<=e.code<600:
                return download(url,num_retry=num_retry-1)
    return html

5.下載過程中的用戶代理問題,在請求中加玻孟,修改請求用Request函數(shù).
版本3.0(最終版本):

from urllib.request import *
def download(url,User_agent='wswp',num_retry=2):
    print('Downloading:',url)
    headers={'User-agent':User_agent}
    request=Request(url,headers=headers)
    try:
        html=urlopen(request).read()
    except Exception as e:
        html=None
        print('Download error:',e.reason)
        if num_retry>0:
            if hasattr(e,'code') and 500<=e.code<600:
                return download(url,num_retry=num_retry-1)
    return html

6.引入urllib.error模塊進行分析:
版本4.0:

from urllib.request import *
from urllib.error import URLError

def download(url,User_agent='wswp',num_retry=2):
    print('Downloading:',url)
    headers={'User-agent':User_agent}
    request=Request(url,headers=headers)
    try:
        html=urlopen(request).read()
    except URLError as e:#引入URLError進行分析
        html=None
        print('Download error:',e.reason)
        if num_retry>0:
            if hasattr(e,'code') and 500<=e.code<600:
                return download(url,num_retry=num_retry-1)
    return html

7.下載中的代理問題唆缴。
版本5.0:

from urllib.request import *
from urllib.parse import *
from urllib.error import URLError

def download(url,User_agent='wswp',proxy=None,num_retry=2):
    print('Downloading:',url)
    headers={'User-agent':User_agent}
    request=Request(url,headers=headers)
    #加入代理服務(wù)器的處理取募,就不用urlopen來下載網(wǎng)頁了琐谤,而是用自己構(gòu)建的opener來打開

    opener=build_opener()
    #若設(shè)置了代理,執(zhí)行下面操作加入代理到opener中
    if proxy:
        proxy_params={urlparse(url).scheme:proxy}
        opener.add_handler(ProxyHandler(proxy_params))#在自己構(gòu)建的瀏覽器中加入了代理服務(wù)器
    #當沒有設(shè)置代理時玩敏,下面的打開方式和urlopen是一樣的
    try:
        html=opener.open(request).read()
        
        #urlopen和opene.open(request)都是返回的
        <http.client.HTTPResponse object at XXX>對象
        時一個類文件斗忌。有read方法,和code方法(鏈接狀態(tài)碼)
        
        
    except URLError as e:#引入URLError進行分析
        html=None
        print('Download error:',e.reason)
        if num_retry>0:
            if hasattr(e,'code') and 500<=e.code<600:
                return download(url,num_retry=num_retry-1)
    return html
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旺聚,一起剝皮案震驚了整個濱河市织阳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌砰粹,老刑警劉巖唧躲,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異碱璃,居然都是意外死亡弄痹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門嵌器,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肛真,“玉大人,你說我怎么就攤上這事爽航◎救茫” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵讥珍,是天一觀的道長历极。 經(jīng)常有香客問我,道長衷佃,這世上最難降的妖魔是什么趟卸? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上锄列,老公的妹妹穿的比我還像新娘新蟆。我一直安慰自己,他們只是感情好右蕊,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吮螺,像睡著了一般饶囚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸠补,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天萝风,我揣著相機與錄音,去河邊找鬼紫岩。 笑死规惰,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的泉蝌。 我是一名探鬼主播歇万,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼勋陪!你這毒婦竟也來了贪磺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤诅愚,失蹤者是張志新(化名)和其女友劉穎寒锚,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體违孝,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡刹前,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了雌桑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喇喉。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖筹燕,靈堂內(nèi)的尸體忽然破棺而出轧飞,到底是詐尸還是另有隱情,我是刑警寧澤撒踪,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布过咬,位于F島的核電站,受9級特大地震影響制妄,放射性物質(zhì)發(fā)生泄漏掸绞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衔掸。 院中可真熱鬧烫幕,春花似錦、人聲如沸敞映。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽振愿。三九已至捷犹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冕末,已是汗流浹背萍歉。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留档桃,地道東北人枪孩。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像藻肄,于是被迫代替她去往敵國和親蔑舞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理嘹屯,服務(wù)發(fā)現(xiàn)斗幼,斷路器,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • 本內(nèi)容為《用Python寫網(wǎng)絡(luò)爬蟲》書籍內(nèi)容抚垄,有興趣的讀者可以購買本書蜕窿,本章的代碼皆可在Python3中運行。為了...
    海人為記閱讀 2,248評論 0 5
  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 10,934評論 6 13
  • 1 前言 作為一名合格的數(shù)據(jù)分析師呆馁,其完整的技術(shù)知識體系必須貫穿數(shù)據(jù)獲取桐经、數(shù)據(jù)存儲、數(shù)據(jù)提取浙滤、數(shù)據(jù)分析阴挣、數(shù)據(jù)挖掘、...
    whenif閱讀 18,064評論 45 523
  • 我是個笑點很低的人誓沸,別人覺得不好笑的事情我也能偷著樂很久,當然我并不是神經(jīng)病壹粟,我只是很享受每一個能讓我快樂的時刻拜隧。...
    陌上花開平子閱讀 739評論 0 0