Python之爬蟲urllib(三)-urllib.error

 目錄

urllib.error

案例1 :

案例2: 


urllib.error

(用 request.openurl() 都應該放在 try 中) 

  • URLError產生的原因:
    • 沒網
    • 服務器鏈接失敗
    • 找不到指定服務器
    • 是OSError的子類
    • 案例1
  • HTTPError, 是URLError的一個子類
    • 案例2
  • 兩者區別:
    • HTTPError是對應的HTTP請求的返回碼錯誤, 如果返回錯誤碼是400以上的,則引發HTTPError
    • URLError對應的一般是網絡出現問題,包括url問題
    • 關係區別: OSError-URLError-HTTPError
    • 最後值得注意的一點是,如果想用HTTPError和URLError一起捕獲異常,那麼需要將HTTPError放在URLError的前面,因爲HTTPError是URLError的一個子類。如果URLError放在前面,出現HTTP異常會先響應URLError,這樣HTTPError就捕獲不到錯誤信息了。
    • 如果不用上面的方法,也可以使用hasattr函數判斷URLError含有的屬性,如果含有reason屬性表明是URLError,如果含有code屬性表明是HTTPError。案例3

案例1 :

'''
URLError的使用
'''

from urllib import request, error


if __name__ == '__main__':

    url = "http://www.baiiiiiiiiiidu.com"

    try:

        req = request.Request(url)
        rsp = request.urlopen( req )
        html = rsp.read().decode()
        print(html)

    except error.URLError as e:
        print("URLError: {0}".format(e.reason))
        print("URLError: {0}".format(e))

    except Exception as e:
        print(e)

案例2: 

'''
URLError的使用
'''

from urllib import request, error


if __name__ == '__main__':

    url = "http:iiiiiiiiidu//www.baidu.com/welcome.html"

    url = "http://www.sipo.gov.cn/www"
    try:

        req = request.Request(url)
        rsp = request.urlopen( req )
        html = rsp.read().decode()
        print(html)

    except error.HTTPError as e:
        print("HTTPError: {0}".format(e.reason))
        print("HTTPError: {0}".format(e))

    except error.URLError as e:
        print("URLError: {0}".format(e.reason))
        print("URLError: {0}".format(e))

    except Exception as e:
        print(e)

案例3: 

'''
URLError的使用
'''
from urllib import request, error

if __name__ == '__main__':

    #一個不存在的連接
    url = "http://www.baidu.com/oooooo"

    try:
        req = request.Request(url)
        rsp = request.urlopen( req )
        html = rsp.read().decode()
        print(html)
    except error.URLError as e:
        if hasattr(e, 'code')
            print("HTTPError")
            print(e.code)
        elif hasattr(e, 'reason')
            print("URLError")
            print(e.reason)

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章