爬虫常出现的两种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)
看一下运行结果: