##網頁的異常處理
(高階語言的乙個優秀特性就是它可以從容不迫的處理每乙個遇到的錯誤,不至於說因為遇到乙個小錯誤就導致整個程式崩潰了,大部分高階語言處理錯誤的方法都是通過檢測異常、處理異常來實現的,python也是一樣。)
※用程式用**進行網際網路訪問的時候,會出現異常那是再正常不過的了,例如說之前實現了乙個**程式,通過十幾個、幾十個** ip 來實現爬蟲訪問,如果說其中乙個** ip 突然不響應了,那就會報錯,這種錯誤的觸發率是極高的,全部 ip 你都可以使用那才是有鬼咧。但是,出現乙個** ip 不能用並不會影響到整個指令碼的任務,所以我們捕獲此類的異常,處理它的方法只需要忽略它就可以了。
※urlerror :當我們的 urlopen() 方法無法處理乙個響應的時候,就會引發乙個 urlerror 的異常,通常在沒有網路連線、或者對方伺服器壓根就不存在的時候,就會引發這個異常,同時,這個 urlerror 的異常會同時伴隨給乙個 reason 屬性,用於包含由錯誤編碼和錯誤資訊組成的元組。
(解析:當我們試圖訪問乙個不存在的網域名稱時,下面的報錯11001是錯誤號,然後伴隨的錯誤資訊是 getaddrinfo failed,就是獲取位址資訊錯誤,因為壓根沒有這個網域名稱。)
(那麼當出現乙個錯誤的時候,伺服器就會返回乙個 http 錯誤號和錯誤的頁面,你可以使用 httperror 例項物件作為頁面返回的響應物件,它同樣也擁有 read() 和 geturl() 或者說info() 這類方法)
下面總結:
處理異常的第一種寫法:
(這一種寫法有一點需要注意的就是:except httperror 必須寫在 except urlerror 的前面,這樣才會響應到 httperror ,因為 httperror是 urlerror 的子類,如果 except urlerror 寫在前面,那麼 except httperror 永遠都響應不了。被上面攔截到了)
處理異常的第二種寫法:
from urllib.request import request, urlopen
from urllib.error import urlerror
req =
request
(someurl)
try:
response =
urlopen
(req)
except urlerror as e:
ifhasattr
(e,'reason'):
print
('we failed to reach a server.'
)print
('reason: '
, e.reason)
elif hasattr
(e,'code'):
print
('the server couldn\'t fulfill the request.'
)print
('error code: '
, e.code)
else
:# everything is fine
(用來hasattr是否擁有這個屬性,先看有沒有錯誤(包括urlerror 和 httperror ),只要有 其中乙個,就會列印 reason, 然後繼續判斷是否有 code ,如果有 code,就是 httperror ,然後也把 code 列印出來。第二種比較推薦) 論乙隻爬蟲的自我修養5 正規表示式
比如你想寫乙個指令碼來自動獲取最新的 ip位址,但是肯定會遇到困難,解析 首先要寫個這個爬蟲肯定要先去這個 審查元素踩點,隨便選中乙個ip審查元素,然後檢視這個ip前後有什麼標籤,可以發現是被td標籤包起來了,接著你會發現別的位置也會有td標籤,但裡邊卻不是ip而是別的資訊,那你可能會花很多時間,先...
第60講 乙隻爬蟲的自我修養8 正規表示式
一 search方法 1 模組級別的search方法 re.search pattern,string,flags 0 2 編譯後的正規表示式模式物件也擁有search方法 regex.search string pos endpos 注意 search方法並不會立刻返回你可以使用的字串取而代之,而...
乙隻爬蟲的產生
以下環境基於py2.7 爬蟲架構 url管理器 處理待爬url以及爬過的url,防止重複抓取以及死迴圈 網頁解析器 解析出想要的資料,以及捕捉新的url位址交給url管理器進行處理繼續抓取。過濾資料,拿到有價值的資料進行處理。資料的存放 python 的 set集合 可以防止資料的重複 需要長期儲存...