urllib2的異常處理

2021-09-08 17:48:42 字數 1627 閱讀 9732

異常處理

作為爬蟲的抓取過程基本就那麼多內容了,後面再將一些正規表示式的東西簡單介紹一下基本就完事了,下面先說說異常處理的方法。先介紹一下抓取過程中的主要異常,如urlerror和httperror。

urlerror可能產生的原因主要有:網路無連線,即本機無法上網;連線不到特定的伺服器;伺服器不存在等。如下所示:

錯誤代號是11004,錯誤原因是getaddrinfo failed。這類錯誤相對來說比較少,理由是在我們抓取網頁時,一般都會人工通過瀏覽器訪問一遍,而最為常見的是httperror。

httperror是urlerror的子類,在你利用urlopen方法發出乙個請求時,伺服器上都會對應乙個應答物件response,其中它包含乙個數字「狀態碼」。舉個例子,假如response是乙個「重定向」,需定位到別的位址獲取文件,urllib2將對此進行處理。

其他不能處理的,urlopen會產生乙個httperror,對應相應的狀態碼,http狀態碼表示http協議所返回的響應的狀態。下面將狀態碼歸結如下:

httperror例項產生後會有乙個code屬性,這就是伺服器傳送的相關錯誤號。因為urllib2可以為你處理重定向,也就是3開頭的代號可以被處理,並且100~299範圍的號碼指示成功,所以我們只能看到400~599的錯誤號碼。另外可能還會遇到10053、10060等狀態碼,一般都是伺服器不穩定造成的,多重新整理幾次就好了。

捕獲的異常是httperror,它會帶有乙個code屬性,就是錯誤代號,另外我們又列印了reason屬性,這就是它的父類urlerror的屬性。

錯誤代號是403,錯誤原因是forbidden,說明伺服器禁止訪問。

我們知道,httperror的父類是urlerror,根據程式設計經驗,父類的異常應當寫到子類異常的後面,如果子類捕獲不到,那麼可以捕獲父類的異常,所以上述的**可以改寫為:

首先對異常的屬性進行判斷,以免出現屬性輸出報錯的現象。

不過,就我個人而言,我不喜歡單獨捕獲該類異常,因為在實際應用過程中,會出項各種各樣的異常,爬蟲任務往往都是幾天幾夜的連續工作,我們又不可能24小 時盯著,所以一旦異常捕獲不到就會造成爬蟲程式的崩潰,而如果你還沒有設定相關爬取進度的日誌,這基本就是個失敗的任務。所以在爬蟲中,異常的捕獲通常不 僅僅是報告異常的原因,更重要的是增強程式的健壯性,不至於因異常而崩潰,所以通常我的做法就是從全域性角度捕獲所有異常。

可以在異常捕獲後記錄到log日誌檔案中,待所有任務初步完成後,可以再對log日誌裡有問題的內容進行二次處理。

Python開發 urllib2異常處理

一 urllib2模組回顧 urllib2模組中最重要的函式是urlopen 函式,用於獲取urls資源 uniform resorce locators urlopen函式不僅可以用於簡單的情況,還可以進行複雜情況下的資源獲取如認證 authentication cookies 等。urlopen...

urllib2使用總結

urllib2庫是涉及到url資源請求的常用庫 官方文件 urllib2 extensible library for opening urls 常用函式 urllib2.urlopen url data timeout cafile capath cadefault context url 可以是...

urllib2使用總結

urllib2是python的乙個獲取urls的元件。他以urlopen函式的形式提供了乙個非常簡單的介面,具有利用不同協議獲取urls的能力,同樣提供了乙個比較複雜的介面來處理一般情況。urllib2支援獲取不同格式的urls例如 ftp gopher等,並利用它們相關網路協議進行獲取。urlli...