真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python3爬蟲中處理異常的方法是什么-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)是專業(yè)的洪澤網(wǎng)站建設(shè)公司,洪澤接單;提供做網(wǎng)站、網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行洪澤網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

這篇文章主要介紹Python3爬蟲中處理異常的方法是什么,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

前一節(jié)我們了解了請(qǐng)求的發(fā)送過(guò)程,但是在網(wǎng)絡(luò)不好的情況下,如果出現(xiàn)了異常,該怎么辦呢?這時(shí)如果不處理這些異常,程序很可能因報(bào)錯(cuò)而終止運(yùn)行,所以異常處理還是十分有必要的。

urllib的error模塊定義了由request模塊產(chǎn)生的異常。如果出現(xiàn)了問(wèn)題,request模塊便會(huì)拋出error模塊中定義的異常。

1. URLError

URLError類來(lái)自u(píng)rllib庫(kù)的error模塊,它繼承自O(shè)SError類,是error異常模塊的基類,由request模塊生的異常都可以通過(guò)捕獲這個(gè)類來(lái)處理。

它具有一個(gè)屬性reason,即返回錯(cuò)誤的原因。

下面用一個(gè)實(shí)例來(lái)看一下:

from urllib import request, error
try:
    response = request.urlopen('http://cuiqingcai.com/index.htm')
except error.URLError as e:
    print(e.reason)

我們打開一個(gè)不存在的頁(yè)面,照理來(lái)說(shuō)應(yīng)該會(huì)報(bào)錯(cuò),但是這時(shí)我們捕獲了URLError這個(gè)異常,運(yùn)行結(jié)果如下:

Not Found

程序沒有直接報(bào)錯(cuò),而是輸出了如上內(nèi)容,這樣通過(guò)如上操作,我們就可以避免程序異常終止,同時(shí)異常得到了有效處理。

2. HTTPError

它是URLError的子類,專門用來(lái)處理HTTP請(qǐng)求錯(cuò)誤,比如認(rèn)證請(qǐng)求失敗等。它有如下3個(gè)屬性。

code:返回HTTP狀態(tài)碼,比如404表示網(wǎng)頁(yè)不存在,500表示服務(wù)器內(nèi)部錯(cuò)誤等。

reason:同父類一樣,用于返回錯(cuò)誤的原因。

headers:返回請(qǐng)求頭。

下面我們用幾個(gè)實(shí)例來(lái)看看:

from urllib import request,error
try:
    response = request.urlopen('http://cuiqingcai.com/index.htm')
except error.HTTPError as e:
    print(e.reason, e.code, e.headers, sep='\n')

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

Not Found
404
Server: nginx/1.4.6 (Ubuntu)
Date: Wed, 03 Aug 2016 08:54:22 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
X-Powered-By: PHP/5.5.9-1ubuntu4.14
Vary: Cookie
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
Link: ; rel="https://api.w.org/"

依然是同樣的網(wǎng)址,這里捕獲了HTTPError異常,輸出了reason、code和headers屬性。

因?yàn)閁RLError是HTTPError的父類,所以可以先選擇捕獲子類的錯(cuò)誤,再去捕獲父類的錯(cuò)誤,所以上述代碼更好的寫法如下:

from urllib import request, error
try:
    response = request.urlopen('http://cuiqingcai.com/index.htm')
except error.HTTPError as e:
    print(e.reason, e.code, e.headers, sep='\n')
except error.URLError as e:
    print(e.reason)
else:
    print('Request Successfully')

這樣就可以做到先捕獲HTTPError,獲取它的錯(cuò)誤狀態(tài)碼、原因、headers等信息。如果不是HTTPError異常,就會(huì)捕獲URLError異常,輸出錯(cuò)誤原因。最后,用else來(lái)處理正常的邏輯。這是一個(gè)較好的異常處理寫法。

有時(shí)候,reason屬性返回的不一定是字符串,也可能是一個(gè)對(duì)象。再看下面的實(shí)例:

import socket
import urllib.request
import urllib.error
try:
    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')

這里我們直接設(shè)置超時(shí)時(shí)間來(lái)強(qiáng)制拋出timeout異常。

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


TIME OUT

可以發(fā)現(xiàn),reason屬性的結(jié)果是socket.timeout類。所以,這里我們可以用isinstance()方法來(lái)判斷它的類型,作出更詳細(xì)的異常判斷。

以上是Python3爬蟲中處理異常的方法是什么的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!


名稱欄目:Python3爬蟲中處理異常的方法是什么-創(chuàng)新互聯(lián)
分享URL:http://weahome.cn/article/hhjgj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部