Python爬蟲urllib2的異常錯(cuò)誤處理

1. urllib2的異常錯(cuò)誤處理

在我們用urlopen或opener.open方法發(fā)出一個(gè)請求時(shí),如果urlopen或opener.open不能處理這個(gè)response苍在,就產(chǎn)生錯(cuò)誤绝页。

URLError

URLError產(chǎn)生的原因主要有:

????沒有網(wǎng)絡(luò)連接

????服務(wù)器連接失敗

????找不到指定的服務(wù)器

我們可以用try except語句來捕獲相應(yīng)的異常。下面的例子里我們訪問了一個(gè)不存在的域名:

# urllib2_urlerror.py

import urllib2

request = urllib2.Request("http://www.ajkfhafwjqh.com")

try:

????urllib2.urlopen(request,timeout=5)

????except urllib2.URLError, err:

????????print err

運(yùn)行結(jié)果如下:

urlopen error寂恬,錯(cuò)誤代碼8续誉,錯(cuò)誤原因是沒有找到指定的服務(wù)器。

HTTPError

HTTPError是URLError的子類初肉,我們發(fā)出一個(gè)請求時(shí)酷鸦,服務(wù)器上都會(huì)對應(yīng)一個(gè)response應(yīng)答對象,其中它包含一個(gè)數(shù)字"響應(yīng)狀態(tài)碼"牙咏。

如果urlopen或opener.open不能處理的臼隔,會(huì)產(chǎn)生一個(gè)HTTPError,對應(yīng)相應(yīng)的狀態(tài)碼妄壶,HTTP狀態(tài)碼表示HTTP協(xié)議所返回的響應(yīng)的狀態(tài)摔握。

注意,urllib2可以為我們處理重定向的頁面(也就是3開頭的響應(yīng)碼)丁寄,100-299范圍的號(hào)碼表示成功氨淌,所以我們只能看到400-599的錯(cuò)誤號(hào)碼例嘱。

# urllib2_httperror.py

import urllib2

request = urllib2.Request("http://www.itcast.cn/blog")

try:

????urllib2.urlopen(request)

????except urllib2.HTTPError, err:

????????print err.code

????????print err

運(yùn)行結(jié)果如下:

404

HTTP Error 404: Not Found

HTTP Error,錯(cuò)誤代號(hào)是404宁舰,錯(cuò)誤原因是Not Found拼卵,說明服務(wù)器無法找到

通常產(chǎn)生這種錯(cuò)誤的,要么url不對蛮艰,要么ip被封腋腮。

2. 改進(jìn)版

由于HTTPError的父類是URLError,所以父類的異常應(yīng)當(dāng)寫到子類異常的后面壤蚜,所以上述的代碼可以這么改寫:

# urllib2_botherror.py

import urllib2

request = urllib2.Request("http://www.itcast.cn/blog")

try:

urllib2.urlopen(request)

except urllib2.HTTPError, err:

????print err.code

????except urllib2.URLError, err:

????print err

else:

print "Good Job"

3. 驗(yàn)證有幾個(gè)代理能用

驗(yàn)證有幾個(gè)代理能用,不能用的拋出異常

# -*- coding:utf-8 -*-

import urllib2

URLERRORCODE = 777

def can_use_proxy(request, openner, URLERRORCODE):

????try:

????????response = openner.open(request,timeout=3)

????????returnresponse.getcode()

????except urllib2.HTTPError,err:

????????return err.code

????except urllib2.URLError,err:

????????return URLERRORCODE

if __name__ == '__main__':

????# 1.大量proxy free

????proxy_list = [

????{"https":"117.69.142.196:808"},

????{"http":"101.68.73.54:53281"},

????{"http":"113.87.161.227:8118"},

????{"http":"114.245.149.215:8118"},

????{"http":"195.5.40.109:3128"}

????]

????#驗(yàn)證有幾個(gè)能用

????can_use_list = []

????for proxy in proxy_list:

????????headers ={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; ????WOW64;Trident/7.0; rv:11.0) like Gecko"}

????????request =urllib2.Request("http://www.baidu.com", headers=headers)

????????#創(chuàng)建 代理處理器

????????proxy_handler =urllib2.ProxyHandler(proxy)

????????openner =urllib2.build_opener(proxy_handler)

????????#驗(yàn)證

????????code =can_use_proxy(request, openner, URLERRORCODE)

????????????print code

4. HTTP響應(yīng)狀態(tài)碼參考

1xx:信息

100Continue

服務(wù)器僅接收到部分請求即寡,但是一旦服務(wù)器并沒有拒絕該請求,客戶端應(yīng)該繼續(xù)發(fā)送其余的請求袜刷。

101Switching Protocols

服務(wù)器轉(zhuǎn)換協(xié)議:服務(wù)器將遵從客戶的請求轉(zhuǎn)換到另外一種協(xié)議聪富。

2xx:成功

200OK

請求成功(其后是對GET和POST請求的應(yīng)答文檔)

201Created

請求被創(chuàng)建完成,同時(shí)新的資源被創(chuàng)建著蟹。

202Accepted

供處理的請求已被接受墩蔓,但是處理未完成。

203Non-authoritative Information

文檔已經(jīng)正常地返回萧豆,但一些應(yīng)答頭可能不正確奸披,因?yàn)槭褂玫氖俏臋n的拷貝。

204No Content

沒有新文檔涮雷。瀏覽器應(yīng)該繼續(xù)顯示原來的文檔阵面。如果用戶定期地刷新頁面,而Servlet可以確定用戶文檔足夠新洪鸭,這個(gè)狀態(tài)代碼是很有用的样刷。

205Reset Content

沒有新文檔。但瀏覽器應(yīng)該重置它所顯示的內(nèi)容览爵。用來強(qiáng)制瀏覽器清除表單輸入內(nèi)容置鼻。

206Partial Conten

t客戶發(fā)送了一個(gè)帶有Range頭的GET請求,服務(wù)器完成了它拾枣。

3xx:重定向

300Multiple Choices

多重選擇沃疮。鏈接列表。用戶可以選擇某鏈接到達(dá)目的地梅肤。最多允許五個(gè)地址司蔬。301Moved Permanently

所請求的頁面已經(jīng)轉(zhuǎn)移至新的url。

302Moved?

Temporarily所請求的頁面已經(jīng)臨時(shí)轉(zhuǎn)移至新的url姨蝴。

303See Other所請求的頁面可在別的url下被找到俊啼。

304Not Modified

未按預(yù)期修改文檔∽笠剑客戶端有緩沖的文檔并發(fā)出了一個(gè)條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)授帕。服務(wù)器告訴客戶同木,原來緩沖的文檔還可以繼續(xù)使用。

305Use Proxy

客戶請求的文檔應(yīng)該通過Location頭所指明的代理服務(wù)器提取跛十。

306Unused此代碼被用于前一版本彤路。目前已不再使用,但是代碼依然被保留芥映。307Temporary Redirect被請求的頁面已經(jīng)臨時(shí)移至新的url洲尊。

4xx:

客戶端錯(cuò)誤400Bad Request服務(wù)器未能理解請求。

401Unauthorized

被請求的頁面需要用戶名和密碼奈偏。

401.1

登錄失敗坞嘀。

401.2

服務(wù)器配置導(dǎo)致登錄失敗。

401.3

由于 ACL 對資源的限制而未獲得授權(quán)惊来。

401.4

篩選器授權(quán)失敗丽涩。

401.5ISAPI/CGI?

應(yīng)用程序授權(quán)失敗。

401.7

訪問被 Web 服務(wù)器上的 URL 授權(quán)策略拒絕裁蚁。這個(gè)錯(cuò)誤代碼為 IIS6.0所專用矢渊。402

Payment Required此代碼尚無法使用。

403Forbidden

對被請求頁面的訪問被禁止厘擂。

403.1執(zhí)行訪問被禁止昆淡。

403.2讀訪問被禁止锰瘸。

403.3寫訪問被禁止刽严。

403.4要求 SSL。

403.5要求 SSL128避凝。

403.6IP 地址被拒絕舞萄。

403.7要求客戶端證書。

403.8站點(diǎn)訪問被拒絕管削。

403.9用戶數(shù)過多倒脓。

403.10配置無效。

403.11密碼更改含思。

403.12拒絕訪問映射表崎弃。

403.13客戶端證書被吊銷。

403.14拒絕目錄列表含潘。

403.15超出客戶端訪問許可饲做。

403.16客戶端證書不受信任或無效。

403.17客戶端證書已過期或尚未生效遏弱。

403.18在當(dāng)前的應(yīng)用程序池中不能執(zhí)行所請求的 URL盆均。這個(gè)錯(cuò)誤代碼為 IIS6.0所專用。

403.19不能為這個(gè)應(yīng)用程序池中的客戶端執(zhí)行 CGI漱逸。這個(gè)錯(cuò)誤代碼為 IIS6.0所專用泪姨。

403.20Passport 登錄失敗游沿。這個(gè)錯(cuò)誤代碼為 IIS6.0所專用。

404Not Found服務(wù)器無法找到被請求的頁面肮砾。

404.0沒有找到文件或目錄诀黍。

404.1無法在所請求的端口上訪問 Web 站點(diǎn)。

404.2Web 服務(wù)擴(kuò)展鎖定策略阻止本請求仗处。

404.3MIME 映射策略阻止本請求蔗草。

405Method Not Allowed請求中指定的方法不被允許。

406Not Acceptable服務(wù)器生成的響應(yīng)無法被客戶端所接受疆柔。

407Proxy Authentication Required用戶必須首先使用代理服務(wù)器進(jìn)行驗(yàn)證咒精,這樣請求才會(huì)被處理。

408Request Timeout請求超出了服務(wù)器的等待時(shí)間旷档。

409Conflict由于沖突模叙,請求無法被完成。

410Gone被請求的頁面不可用鞋屈。

411Length Required"Content-Length"未被定義范咨。如果無此內(nèi)容,服務(wù)器不會(huì)接受請求厂庇。

412Precondition Failed請求中的前提條件被服務(wù)器評估為失敗渠啊。

413Request Entity Too Large由于所請求的實(shí)體的太大,服務(wù)器不會(huì)接受請求权旷。

414Request-url Too Long由于url太長替蛉,服務(wù)器不會(huì)接受請求。當(dāng)post請求被轉(zhuǎn)換為帶有很長的查詢信息的get請求時(shí)拄氯,就會(huì)發(fā)生這種情況躲查。415Unsupported Media Type由于媒介類型不被支持,服務(wù)器不會(huì)接受請求译柏。416Requested Range Not Satisfiable服務(wù)器不能滿足客戶在請求中指定的Range頭镣煮。

417Expectation Failed執(zhí)行失敗。423鎖定的錯(cuò)誤鄙麦。

5xx:服務(wù)器錯(cuò)誤500Internal Server Error請求未完成典唇。服務(wù)器遇到不可預(yù)知的情況。

500.12應(yīng)用程序正忙于在 Web 服務(wù)器上重新啟動(dòng)胯府。

500.13Web 服務(wù)器太忙介衔。

500.15不允許直接請求 Global.asa。

500.16UNC 授權(quán)憑據(jù)不正確盟劫。這個(gè)錯(cuò)誤代碼為 IIS6.0所專用夜牡。

500.18URL 授權(quán)存儲(chǔ)不能打開。這個(gè)錯(cuò)誤代碼為 IIS6.0所專用。

500.100內(nèi)部 ASP 錯(cuò)誤塘装。

501Not Implemented請求未完成急迂。服務(wù)器不支持所請求的功能。

502Bad Gateway請求未完成蹦肴。服務(wù)器從上游服務(wù)器收到一個(gè)無效的響應(yīng)僚碎。502.1CGI 應(yīng)用程序超時(shí)∫趸希 ·

502.2CGI 應(yīng)用程序出錯(cuò)勺阐。

503Service Unavailable請求未完成。服務(wù)器臨時(shí)過載或當(dāng)機(jī)矛双。

504Gateway Timeout網(wǎng)關(guān)超時(shí)渊抽。

505HTTP Version Not Supported服務(wù)器不支持請求中指明的HTTP協(xié)議版本

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市议忽,隨后出現(xiàn)的幾起案子懒闷,更是在濱河造成了極大的恐慌,老刑警劉巖栈幸,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愤估,死亡現(xiàn)場離奇詭異,居然都是意外死亡速址,警方通過查閱死者的電腦和手機(jī)玩焰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芍锚,“玉大人昔园,你說我怎么就攤上這事∧致” “怎么了蒿赢?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長渣触。 經(jīng)常有香客問我,道長壹若,這世上最難降的妖魔是什么嗅钻? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮店展,結(jié)果婚禮上养篓,老公的妹妹穿的比我還像新娘弛随。我一直安慰自己翎猛,他們只是感情好怠褐,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布箕肃。 她就那樣靜靜地躺著坠狡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪竖哩。 梳的紋絲不亂的頭發(fā)上赂毯,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機(jī)與錄音萍丐,去河邊找鬼轩端。 笑死,一個(gè)胖子當(dāng)著我的面吹牛逝变,可吹牛的內(nèi)容都是我干的基茵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼壳影,長吁一口氣:“原來是場噩夢啊……” “哼拱层!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宴咧,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤舱呻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后悠汽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體箱吕,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年柿冲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茬高。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡假抄,死狀恐怖怎栽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宿饱,我是刑警寧澤熏瞄,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站谬以,受9級(jí)特大地震影響强饮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜为黎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一邮丰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧铭乾,春花似錦剪廉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春泉沾,著一層夾襖步出監(jiān)牢的瞬間捞蚂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工爆哑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留洞难,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓揭朝,卻偏偏與公主長得像队贱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子潭袱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

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

  • 一柱嫌、網(wǎng)絡(luò)爬蟲的定義 網(wǎng)絡(luò)爬蟲,即Web Spider屯换,是一個(gè)很形象的名字编丘。把互聯(lián)網(wǎng)比喻成一個(gè)蜘蛛網(wǎng),那么Spide...
    隨風(fēng)化作雨閱讀 1,078評論 0 0
  • 一彤悔、概述 urllib2是Python的一個(gè)針對URLs的庫嘉抓。他以urlopen函數(shù)的形式提供了一個(gè)非常簡單的...
    MiracleJQ閱讀 1,476評論 0 5
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)晕窑,斷路器抑片,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 1 前言 作為一名合格的數(shù)據(jù)分析師,其完整的技術(shù)知識(shí)體系必須貫穿數(shù)據(jù)獲取杨赤、數(shù)據(jù)存儲(chǔ)敞斋、數(shù)據(jù)提取、數(shù)據(jù)分析疾牲、數(shù)據(jù)挖掘植捎、...
    whenif閱讀 18,052評論 45 523
  • 身在小學(xué)教學(xué)一線,面對一群6到12歲的孩子阳柔,經(jīng)常會(huì)遇到有些家長在面對自己孩子學(xué)習(xí)上出現(xiàn)了種種困難時(shí)抱怨:“人...
    一笑隨風(fēng)閱讀 760評論 6 4