快使用Ctrl+D收藏本站!如果本站的文章以及資源有幫助到您,希望您能贊助本站服務器費用,感謝您的支持!本站開放注冊,現邀請您一起分享技術心得!您可以-注冊-

Python3.6爬蟲入門自學教程之八:URLError異常處理

Python爬蟲 Julius_wen 1073℃ 0評論

1.URLError簡介

天天炫斗洛漓 www.wfrrl.icu 打開python標準庫鏈接,https://docs.python.org/3.6/library/urllib.error.html。然后找到21.9. urllib.error — Exception classes raised by urllib.request,這個頁面里的內容就是我們本文要探討的問題。

The urllib.error module defines the exception classes for exceptions raised by urllib.request. The base exception class is URLError.

exception urllib.error.URLErrorThe handlers raise this exception (or derived exceptions) when they run into a problem. It is a subclass of OSError.

reason

The reason for this error. It can be a message string or another exception instance.

exception urllib.error.HTTPError

Though being an exception (a subclass of URLError), an HTTPError can also function as a non-exceptional file-like return value (the same thing that urlopen() returns). This is useful when handling exotic HTTP errors, such as requests for authentication.

code
An HTTP status code
reason
This is usually a string explaining the reason for this error.
headers
The HTTP response headers for the HTTP request that caused the HTTPError.

大家大概瀏覽一下,四級英語水平的我都能看懂個大概,大家應該也可以的。

urllib.error??槎ㄒ辶艘恍┯?code>urllib.request產生的異常,這個??櫓兇罨鏡睦嗍?code>URLError(基類)。這個類是OSError的子類。URL訪問出現異常情況的時候,urllib.error.URLError這個類就會處理這些異常情況。

urllib.error.HTTPError是URLError這個類的子類。code是爆出異常的狀態碼,reason是異常的原因說明。

2.天天炫斗洛漓

100:繼續 ?客戶端應當繼續發送請求??突Ф擻Φ奔絳⑺頹肭蟮氖S嗖糠?,或者如果請求已經完成,忽略這個響應。

101: 轉換協議 ?在發送完這個響應最后的空行后,服務器將會切換到在Upgrade 消息頭中定義的那些協議。只有在切換新的協議更有好處的時候才應該采取類似措施。

102:繼續處理 ? 由WebDAV(RFC 2518)擴展的狀態碼,代表處理將被繼續執行。

200:請求成功 ? ? ?處理方式:獲得響應的內容,進行處理

201:請求完成,結果是創建了新資源。新創建資源的URI可在響應的實體中得到 ? ?處理方式:爬蟲中不會遇到

202:請求被接受,但處理尚未完成 ? ?處理方式:阻塞等待

204:服務器端已經實現了請求,但是沒有返回新的信 息。如果客戶是用戶代理,則無須為此更新自身的文檔視圖。 ? ?處理方式:丟棄

300:該狀態碼不被HTTP/1.0的應用程序直接使用, 只是作為3XX類型回應的默認解釋。存在多個可用的被請求資源。?? ?處理方式:若程序中能夠處理,則進行進一步處理,如果程序中不能處理,則丟棄
301:請求到的資源都會分配一個永久的URL,這樣就可以在將來通過該URL來訪問此資源?? ?處理方式:重定向到分配的URL

302:請求到的資源在一個不同的URL處臨時保存 ?? ?處理方式:重定向到臨時的URL

304:請求的資源未更新 ?? ?處理方式:丟棄

400:非法請求 ?? ?處理方式:丟棄

401:未授權 ?? ?處理方式:丟棄

403:禁止 ?? ?處理方式:丟棄

404:沒有找到 ?? ?處理方式:丟棄

500:服務器內部錯誤 ?服務器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。一般來說,這個問題都會在服務器端的源代碼出現錯誤時出現。

501:服務器無法識別 ?服務器不支持當前請求所需要的某個功能。當服務器無法識別請求的方法,并且無法支持其對任何資源的請求。

502:錯誤網關 ?作為網關或者代理工作的服務器嘗試執行請求時,天天炫斗洛漓

503:服務出錯 ? 由于臨時的服務器維護或者過載,服務器當前無法處理請求。這個狀況是臨時的,并且將在一段時間以后恢復。

3.捕獲HTTPError錯誤實例說明

HTTPError實例產生后,會有一個code屬性,這個屬性用來表示當前網絡連接的狀態碼。下面來看幾個實例:

1.不加try-except訪問不存在網址

運行結果如下:

2.添加try-except:

運行結果如下:

3.403forbidden禁止訪問

運行結果如下:天天炫斗洛漓

4.先寫子類異常,再寫父類異常

HTTPError的父類是URLError,根據編程經驗,父類的異常應當寫到子類異常的后面,如果子類捕獲不到,那么可以捕獲父類的異常,所以上述的代碼可以這么改寫

這里運行結果如下:

咦~,怎么只有一個403狀態碼,沒有打印出錯誤原因啊。原來是這樣的,如果捕獲到了HTTPError,則輸出code,不會再處理URLError異常。如果發生的不是HTTPError,則會去捕獲URLError異常,輸出錯誤原因。

5.加入 hasattr屬性提前對屬性進行判斷

4.本章小結

本篇博文,我們一起學習了HTTPError和URLError兩個類進行異常捕獲的學習,再下一篇博文中,我們將要開始學習python的正則表達式,學完正則表達式之后,我們就開始做幾個小項目進行練手,小項目完成之后,我們將開始學習高級的爬蟲框架。大家一起加油??!

轉載請注明:天天炫斗洛漓 » Python3.6爬蟲入門自學教程之八:URLError異常處理

贊賞作者

微信贊賞支付寶贊賞

喜歡 (1)or分享 (0)

如果您喜歡本站文章,感覺本站的資源對您有幫助,請狠狠點擊下面

每累計贊助40元,即可讓本站按最低配置運行一個月,感謝您的支持!

發表我的評論
取消評論

表情

Hi,您需要填寫昵稱和郵箱!

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址