zoukankan      html  css  js  c++  java
  • Python3网络爬虫(三):urllib.error异常

    运行平台:Windows 
    Python版本:Python3.x 
    IDE:Sublime text3

    转载请注明作者和出处:http://blog.csdn.net/c406495762/article/details/59488464

    一.urllib.error

        urllib.error可以接收有urllib.request产生的异常。urllib.error有两个方法,URLError和HTTPError。如下图所示:

    1

    2

        URLError是OSError的一个子类,HTTPError是URLError的一个子类,服务器上HTTP的响应会返回一个状态码,根据这个HTTP状态码,我们可以知道我们的访问是否成功。例如第二个笔记中提到的200状态码,表示请求成功,再比如常见的404错误等。

    1.URLError

        让我们先看下URLError的异常,创建文件urllib_test06.py,编写如下代码:

    # -*- coding: UTF-8 -*-
    from urllib import request
    from urllib import error
    
    if __name__ == "__main__":
        #一个不存在的连接
        url = "http://www.iloveyou.com/"
        req = request.Request(url)
        try:
            response = request.urlopen(req)
            html = response.read().decode('utf-8')
            print(html)
        except error.URLError as e:
            print(e.reason)

        我们可以看到如下运行结果:

    3

    2.HTTPError

        再看下HTTPError异常,创建文件urllib_test07.py,编写如下代码:

    # -*- coding: UTF-8 -*-
    from urllib import request
    from urllib import error
    
    if __name__ == "__main__":
        #一个不存在的连接
        url = "http://www.douyu.com/Jack_Cui.html"
        req = request.Request(url)
        try:
            responese = request.urlopen(req)
            # html = responese.read()
        except error.HTTPError as e:
            print(e.code)

        运行之后,我们可以看到404,这说明请求的资源没有在服务器上找到,www.douyu.com这个服务器是存在的,但是我们要查找的Jack_Cui.html资源是没有的,所以抛出404异常。

    4

    二.URLError和HTTPError混合使用

        最后值得注意的一点是,如果想用HTTPError和URLError一起捕获异常,那么需要将HTTPError放在URLError的前面,因为HTTPError是URLError的一个子类。如果URLError放在前面,出现HTTP异常会先响应URLError,这样HTTPError就捕获不到错误信息了。

    5

        如果不用上面的方法,也可以使用hasattr函数判断URLError含有的属性,如果含有reason属性表明是URLError,如果含有code属性表明是HTTPError。创建文件urllib_test08.py,编写代码如下:

    # -*- coding: UTF-8 -*-
    from urllib import request
    from urllib import error
    
    if __name__ == "__main__":
        #一个不存在的连接
        url = "http://www.douyu.com/Jack_Cui.html"
        req = request.Request(url)
        try:
            responese = request.urlopen(req)
        except error.URLError as e:
            if hasattr(e, 'code')
                print("HTTPError")
                print(e.code)
            elif hasattr(e, 'reason')
                print("URLError")
                print(e.reason)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

        运行结果如下:

    6

  • 相关阅读:
    nyoj58 最少步数
    oj2787 算24
    一位ACMer过来人的心得
    hdu递推公式水题
    nyoj20 吝啬的国度
    hdu1421 搬寝室
    全排列生成算法:next_permutation
    hdu2544 最短路
    poj1691 Painting A Board
    hdu1274 展开字符串
  • 原文地址:https://www.cnblogs.com/brady-wang/p/8321396.html
Copyright © 2011-2022 走看看