異常處理是python中對錯誤的另外一種處理方式
至於爲何在爬蟲代碼中加入異常處理,異常處理是什麼,在這裏給你們兩個網站,有興趣的話能夠仔細研究
1. http://python.jobbole.com/81341/ 伯樂在線,URL異常處理
2. http://www.runoob.com/python/python-exceptions.html 菜鳥教程,python異常處理
這兩個網站已經講得很詳細了,你要是所有看完而且看懂了的話,那麼下面我要講的對你來講就是小兒科,可是,若是你跟本沒看或者看了以後發現太難了看不下去,這也不要緊,由於咱們如今還用不到這麼多
咱們要知道的只有3個問題:
1. 什麼是異常處理
2. 爲何要加入異常處理
3. 怎麼使用異常處理
1. 什麼是異常處理
異常是指程序中的例外,違例狀況,簡單的說就是程序運行中出現的錯誤
異常處理是程序出現錯誤以後的處理方法
2. 爲何要加入異常處理
程序的運行過程當中哪一個地方都有可能出現錯誤,因此咱們須要對程序運行中出現的錯誤進行處理,這個處理可能有不少種方式,包括輸出錯誤信息或者執行什麼操做等等
3. 怎麼使用異常處理
在程序運行的過程當中,若是發生了錯誤,能夠事先約定返 回一個錯誤代碼,這樣,就能夠知道是否有錯,以及出錯的緣由
python中使用try/except語句來進行異常處理
try用來檢測語句中的錯誤,從而讓except語句捕獲異常信息並處理
當咱們認爲某些代碼可能會出錯時,就能夠用try來運行這段代碼,若是執行出錯,則後續代碼不會繼續執行,而是直接跳轉至錯誤處理代碼,即except語句塊
下面來看一個簡單的例子:
html
try: print 'try...' r = 10 / 0 print 'result:', r # ZeroDivisionError 是錯誤的類型,在程序運行以前咱們應該預測程序可能會出現什麼錯誤 # e是遇到錯誤時輸出的信息,e,將這個信息返回 except ZeroDivisionError, e: print 'except:', e
輸出結果是:
python
上面的程序中由於被除數是0,因此返回的錯誤信息是integer division or modulo by zero,而這個信息是存在e這個變量中
在瀏覽網頁的過程當中,可能會遇到網址不存在或者鏈接超時等各類狀況,而咱們運行爬蟲程序時也同樣,在爬蟲中,咱們遇到的錯誤類型主要有兩類
1. URLError,可能產生的緣由:
1. 網絡無鏈接,即本機沒法上網
2. 鏈接不到特定的服務器
3. 服務器不存在
2. HTTPError
HTTPError是URLError的子類,在你利用urlopen方法發出一個請求時,服務器上都會對應一個應答對象response,其中它包含一個數字"狀態碼"
這樣說你們可能不明白,那再換一個說法,當咱們打不開網頁時,會出現404,502等等的提示,這個404,502就是狀態碼,我會在下一篇將網上找到的HTTPError錯誤碼列舉出來,一樣,不想看的話也能夠不看
咱們剛剛說道錯誤有兩個,可是咱們一般用URLError,由於URLError是父類,HTTPError是URLError的子類
說了這麼久,最終的目的是要在咱們的代碼中加入異常處理,來看看代碼:
服務器
#!/uer/bin/env python # -*- coding: UTF-8 -*- __author__ = '217小月月坑' ''' 加入異常處理 ''' import urllib2 url = 'http://www.qiushibaike.com/' user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0' headers = {'User-Agent':user_agent} try: request = urllib2.Request(url,headers=headers) response = urllib2.urlopen(request) print response.read().decode("gbk") except urllib2.URLError,e: if hasattr(e,"code"): print e.code if hasattr(e,"reason"): print e.reason