python3網路爬蟲學習——基本庫的使用(3)

來源:互聯網
上載者:User

標籤:收信   ==   ade   set   www.   函數   close   執行個體   異常   

這一節我們主要講解處理異常

在我們發送請求的時候,有的時候可能網路不好,出現了異常,程式因為報錯而終止運行,為此我們需要對其進行處理

urllib裡的error模組定義了request模組產生的異常,下面便介紹裡面的函數:

  • URLError

該類是繼承自OSError類,是error異常模組的基類,由request模組產生的異常都可以由這個類捕抓,它具有一個reason屬性

import urllib.error,urllib.requesttry:    response = urllib.request.urlopen(‘https://cuiqingcai.com/index.htm‘)except urllib.error.URLError as e:    print(e.reason)

正常程式會報錯,但最終程式輸出的卻是Not Found

值得注意的是,在程式運行中,如果Import 的是import urllib.error那麼後面使用的時候也要urllib.error.URLError,如果import的是from urllib impoort request,error那麼後面就可以直接request.urlopen,error.URLError等

  • HTTPError

這個是URLError的子類,專門用來處理HTTP的請求錯誤,比如認證請求失敗等,他有三個屬性:

                  code:返回HTTP狀態代碼,比如404表示網頁不存在,505表示伺服器內部錯誤

               reason:返回錯誤的原因

               headers:返回要求標頭

下面上執行個體:

from urllib import request,errortry:    response = request.urlopen(‘https://cuiqingcai.com/index.htm‘)except error.HTTPError as e:    print(e.reason,e.code,e.headers)
===================== RESTART: F:\Python\exercise\ok.py ===================


Not Found 404 Server: nginx/1.10.3 (Ubuntu)Date: Fri, 17 Aug 2018 03:14:05 GMTContent-Type: text/html; charset=UTF-8Transfer-Encoding: chunkedConnection: closeVary: CookieExpires: Wed, 11 Jan 1984 05:00:00 GMTCache-Control: no-cache, must-revalidate, max-age=0Link: <https://cuiqingcai.com/wp-json/>; rel="https://api.w.org/"

因為HTTPError是URLError的子類,所以可以選擇捕獲錯誤時先捕獲子類的,再去捕獲父類的

from urllib import request,errortry:    response = request.urlopen(‘https://cuiqingcai.com/index.htm‘)except error.HTTPError as e:    print(e.reason,e.code,e.headers)except error.URLError as e:    print(e.reason)else:    print(‘Request Successfully‘)

有時候reason返回的不是一個字串也可能為一個對象,這時候有可能要用到socket庫

socket 是網路連接端點。例如當你的Web瀏覽器請求www.jb51.net上的首頁時,你的Web瀏覽器建立一個socket並命令它去串連 www.jb51.net的Web伺服器主機,Web伺服器也對來自的請求在一個socket上進行監聽。兩端使用各自的socket來發送和 接收資訊。

import socketimport urllib.requestimport urllib.errortry:    response = urllib.request.urlopen(‘https://www.baidu.com‘,timeout = 0.01)except urllib.error.URLError as e:    print(type(e.reason))    if isinstance(e.reason,socket.timeout):        print(‘TIME OUT‘)
===================== RESTART: F:\Python\exercise\ok.py ===================

<class ‘socket.timeout‘>
TIME OUT

 

可見設定逾時時間使程式強制執行了timeout異常(type函數不會認為子類是父類的一種類型,但isinstance會認為是)

python3網路爬蟲學習——基本庫的使用(3)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.