Python3,爬虫的HTTP Error、URL Error及混合使用

URL Error

url error 很常见的,就是url地址不正确,或者失效
我们来看看 代码是怎么实现的

# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-8-20
"""

from urllib import request
from urllib import error

#定义一个不存在的url 地址
url = 'https://www.baidu1.com'
#获取返回结果
req = request.Request(url)

#追加断言
try:
	response = request.urlopen(requst)
	html = response.read().decode('utf-8')
	print(html)
except error.URLError as e:
	print(e.reason)
	

执行后的结果:

[Errno 11001] getaddrinfo failed

这个执行结果意思就是:获取地址错误

HTTP Error

# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-8-20
"""

from urllib import request
from urllib import error

#定义一个不存在的url 地址
url = 'https://www.baidu1.com'
#获取返回结果
req = request.Request(url)

#追加断言
try:
    response= urllib.request.urlopen(req)
    # html = response.read()

except urllib.error.HTTPError as e:
    print(f"HTTP Error is :" ,e.code)

同样,看一下运行结果:

HTTP Error is : 403

#code 属性表明 HTTPError
#reason 属性表明 URLError
#403 ⇒请求被服务器拒绝了

如果HTTP状态码,不太清楚,可以看小鱼的《HTTP状态码

HTTP Error 和URL Error 混合使用

接下来,我们看一下 同时使用时,是什么情况。
老规矩,上代码:

# -*- coding: utf-8 -*-
# @ auth : carl_DJ
# @ time : 2020-8-20

"""
如果httperr 和urlerr混用,那么需要把HTTPerr放在 urlerr的前面,
因为 httperr 是URlerr 一个子类

可以使用hasstattr函数来判断urlerr含有的属性:
code属性表明 httperror
reason 属性表明 urlerror

"""

from urllib import error
from urllib import request

#定义一个不存在的url地址
url = "http://www.douyu.com/Jack_Cui.html"

req = request.Request(url)

print("----URLError错误信息-------")
try:
    response = request.urlopen(req)
    html = response.read().decode('utf -8')
    print(html)
except error.URLError as e:
    print("URLError:%s" %e.reason)
    print("\n" )


print("----HTTPError错误信息-------")
try:
    response = request.urlopen(req)
except error.HTTPError as a:
    print("HTTPError:%s" %a.code)
    print("\n" )

print("----URLError和HTTPError混合使用-------")
try:
    response = request.urlopen(url)
except error.URLError as s:

    if hasattr(s,'code'):
        print("HTTPError")
        print(s.code)
    elif hasattr(s,'reason'):
        print("URLError")
        print(s.reason)

看一下运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wuyoudeyuer/article/details/108127295