python爬蟲urllib中的異常模塊處理
urllib中的異常處理
在我們寫爬蟲程序時(shí),若出現(xiàn)url中的錯(cuò)誤,那么我們就無法爬取我們想要的內(nèi)容,對此,我們引入了urllib中的異常處理。
url的組成部分
URL由6個(gè)部分組成:eg:
https://www.baidu.com/s?wd=易烊千璽
- 協(xié)議(http/https)
- 主機(jī)(www.baidu.com)
- 端口號(80/443)
- 路徑(s)
- 參數(shù)(wd=易烊千璽)
- 錨點(diǎn)
常見的端口號:
http(80) https(443) mysql(3306) oracle(1521) redis(6379) mongodb(27017)
URLError
通常來說,URLError報(bào)錯(cuò)通常為url地址中主機(jī)部分的錯(cuò)誤:
實(shí)例:
url = 'https://www.baidu.com1/'
運(yùn)行結(jié)果:
urllib.error.URLError: <urlopen error [Errno 11001] getaddrinfo failed
HTTPError
這個(gè)異常的通常是url地址中參數(shù)或是路徑的錯(cuò)誤。
實(shí)例:
url = 'https://www.jianshu.com/p/3388cf148dba1'
運(yùn)行結(jié)果:
urllib.error.HTTPError: HTTP Error 404: Not Found
簡介
- HTTPError類是URLError類的子類
- 導(dǎo)入的包urllib.error.HTTPError/urllib.error.URLError
- http錯(cuò)誤:http錯(cuò)誤是針對瀏覽器無法連接到服務(wù)器而增加的出來的錯(cuò)誤提示,引導(dǎo)并告訴瀏覽者該頁是出了什么問題。
- 通過urllib發(fā)送請求的時(shí)候,有可能會(huì)發(fā)送失敗,這個(gè)時(shí)候如果想讓你的代碼更健壯,可以通過try -except進(jìn)行捕獲異常。
Urllib.error 模塊
urllib.error 模塊為 urllib.request 所引發(fā)的異常定義了異常類,基礎(chǔ)異常類是 URLError。
urllib.error 包含了兩個(gè)方法,URLError 和 HTTPError。
URLError 是 OSError 的一個(gè)子類,用于處理程序在遇到問題時(shí)會(huì)引發(fā)此異常(或其派生的異常)。
HTTPError 是 URLError 的一個(gè)子類,用于處理特殊 HTTP 錯(cuò)誤例如作為認(rèn)證請求的時(shí)候,包含的屬性 code 為 HTTP 的狀態(tài)碼, reason 為引發(fā)異常的原因,headers 為導(dǎo)致 HTTPError 的特定 HTTP 請求的 HTTP 響應(yīng)頭。
異常處理
用try except語句塊捕獲并處理異常,其基本語法結(jié)構(gòu)如下所示:
try:可能產(chǎn)生異常的代碼塊
except [ (Error1, Error2, … ) [as e] ]:處理異常的代碼塊1
except [ (Error3, Error4, … ) [as e] ]:處理異常的代碼塊2
except [Exception]:處理其它異常
實(shí)例:
原url= ‘https://www.jianshu.com/p/3388cf148dba’
源碼:
import urllib.request import urllib.error url = 'https://www.jianshu.com1/p/3388cf148dba' # url的組成 eg:https://www.baidu.com/s?wd=易烊千璽 # 1.協(xié)議(http/https) 2.主機(jī)(www.baidu.com) 3.端口號(80/443) 4.路徑(s) 5.參數(shù)(wd=易烊千璽) 6.錨點(diǎn) # 常見的端口號 # http(80) https(443) mysql(3306) oracle(1521) redis(6379) mongodb(27017) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36' } try: request = urllib.request.Request(url = url,headers = headers) response = urllib.request.urlopen(request) content = response.read().decode('utf8') print(content) except urllib.error.HTTPError: print('HTTP異常,請稍后!') except urllib.error.URLError: print('URL異常,請稍后!')
1.URLError
url = ‘https://www.jianshu.com1/p/3388cf148dba’
運(yùn)行結(jié)果:
2.HTTPError
url = ‘https://www.jianshu.com/p/3388cf148dba111’
運(yùn)行結(jié)果:
由于HTTPRError是URLError的子類,所以需先寫httperror的異常處理,否則一律認(rèn)為是URLError的異常。urllib的異常處理就寫到這啦,希望大家都不會(huì)出現(xiàn)異常,更多關(guān)于python爬蟲urllib異常處理的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python通過scapy獲取局域網(wǎng)所有主機(jī)mac地址示例
這篇文章主要介紹了python通過scapy獲取局域網(wǎng)所有主機(jī)mac地址示例,需要的朋友可以參考下2014-05-05解決Tensorflow sess.run導(dǎo)致的內(nèi)存溢出問題
今天小編就為大家分享一篇解決Tensorflow sess.run導(dǎo)致的內(nèi)存溢出問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02使用matplotlib繪制并排柱狀圖的實(shí)戰(zhàn)案例
堆積柱狀圖有堆積柱狀圖的好處,比如說我們可以很方便地看到多分類總和的趨勢,下面這篇文章主要給大家介紹了關(guān)于使用matplotlib繪制并排柱狀圖的相關(guān)資料,需要的朋友可以參考下2022-07-07Python搭建代理IP池實(shí)現(xiàn)獲取IP的方法
這篇文章主要介紹了Python搭建代理IP池實(shí)現(xiàn)獲取IP的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10