快使用Ctrl+D收藏本站!本站早已不再维护,择期将关闭本站!!本站资源已全部失效,请勿打赏!!PLC培训创业官网 苏州实操派科技-点击访问-

Python3.6爬虫入门自学教程之八:URLError异常处理

Python爬虫 π³朱子文 7607℃ 0评论

1.URLError简介

打开python标准库链接,https://docs.python.org/3.6/library/urllib.error.html。然后找到21.9. urllib.error — Exception classes raised by urllib.request,这个页面里的内容就是我们本文要探讨的问题。

The urllib.error module defines the exception classes for exceptions raised by urllib.request. The base exception class is URLError.

exception urllib.error.URLErrorThe handlers raise this exception (or derived exceptions) when they run into a problem. It is a subclass of OSError.

reason

The reason for this error. It can be a message string or another exception instance.

exception urllib.error.HTTPError

Though being an exception (a subclass of URLError), an HTTPError can also function as a non-exceptional file-like return value (the same thing that urlopen() returns). This is useful when handling exotic HTTP errors, such as requests for authentication.

code
An HTTP status code
reason
This is usually a string explaining the reason for this error.
headers
The HTTP response headers for the HTTP request that caused the HTTPError.

大家大概浏览一下,四级英语水平的我都能看懂个大概,大家应该也可以的。

urllib.error模块定义了一些由urllib.request产生的异常,这个模块中最基本的类是URLError(基类)。这个类是OSError的子类URL访问出现异常情况的时候,urllib.error.URLError这个类就会处理这些异常情况。

urllib.error.HTTPError是URLError这个类的子类。code是爆出异常的状态码,reason是异常的原因说明。

2.HTTPError 状态码总结

100:继续  客户端应当继续发送请求。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。

101: 转换协议  在发送完这个响应最后的空行后,服务器将会切换到在Upgrade 消息头中定义的那些协议。只有在切换新的协议更有好处的时候才应该采取类似措施。

102:继续处理   由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。

200:请求成功      处理方式:获得响应的内容,进行处理

201:请求完成,结果是创建了新资源。新创建资源的URI可在响应的实体中得到    处理方式:爬虫中不会遇到

202:请求被接受,但处理尚未完成    处理方式:阻塞等待

204:服务器端已经实现了请求,但是没有返回新的信 息。如果客户是用户代理,则无须为此更新自身的文档视图。    处理方式:丢弃

300:该状态码不被HTTP/1.0的应用程序直接使用, 只是作为3XX类型回应的默认解释。存在多个可用的被请求资源。    处理方式:若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃
301:请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源    处理方式:重定向到分配的URL

302:请求到的资源在一个不同的URL处临时保存     处理方式:重定向到临时的URL

304:请求的资源未更新     处理方式:丢弃

400:非法请求     处理方式:丢弃

401:未授权     处理方式:丢弃

403:禁止     处理方式:丢弃

404:没有找到     处理方式:丢弃

500:服务器内部错误  服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现。

501:服务器无法识别  服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。

502:错误网关  作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。

503:服务出错   由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。

3.捕获HTTPError错误实例说明

HTTPError实例产生后,会有一个code属性,这个属性用来表示当前网络连接的状态码。下面来看几个实例:

1.不加try-except访问不存在网址

运行结果如下:

2.添加try-except:

运行结果如下:

3.403forbidden禁止访问

运行结果如下:403,服务器禁止访问

4.先写子类异常,再写父类异常

HTTPError的父类是URLError,根据编程经验,父类的异常应当写到子类异常的后面,如果子类捕获不到,那么可以捕获父类的异常,所以上述的代码可以这么改写

这里运行结果如下:

咦~,怎么只有一个403状态码,没有打印出错误原因啊。原来是这样的,如果捕获到了HTTPError,则输出code,不会再处理URLError异常。如果发生的不是HTTPError,则会去捕获URLError异常,输出错误原因。

5.加入 hasattr属性提前对属性进行判断

4.本章小结

本篇博文,我们一起学习了HTTPError和URLError两个类进行异常捕获的学习,再下一篇博文中,我们将要开始学习python的正则表达式,学完正则表达式之后,我们就开始做几个小项目进行练手,小项目完成之后,我们将开始学习高级的爬虫框架。大家一起加油!!

转载请注明:燕骏博客 » Python3.6爬虫入门自学教程之八:URLError异常处理

赞赏作者

微信赞赏支付宝赞赏

喜欢 (1)or分享 (0)

如果您喜欢本站文章,感觉本站的资源对您有帮助,请狠狠点击下面

每累计赞助40元,即可让本站按最低配置运行一个月,感谢您的支持!

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址