Python网络爬虫之URLError异常处理

本节主要给大家讲解一下在爬虫中遇到异常的处理机制,主要说的是URLError和HTTPError。


URLError


产生URLError的原因一般有以下几种原因:

本地网络无法连接

连接不到指定的服务器

服务器不存在


直接上代码:


当我们访问一个不存在的URL时,就会报出一个URLError的错误,如下:



这时我们就要用try-except语句来捕获这样的错误,正确的写法如下:



HTTPError


HTTPError是URLError的一个子类,在我们向web服务器发送一个请求的时候,服务器会有一个应答response对象,其中就包含了一个数字状态码,这个HTTP状态码是HTTP协议返回的响应状态。若响应正常返回则是一个正确的状态码,如200;但若出现了urllib无法处理的错误状态码,则就会将错误抛出给我们。


下面罗列出常见状态码的含义:

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


这个异常的状态码就包含在HTTPError的code属性中,应用try-except来捕获,代码如下:


运行结果为:


404是状态码,Not Found是错误原因。


为了更加全面的捕获可能产生的异常,我们也要讲URLError也写上,根据编程经验,要先捕获子类错误,在捕获父类异常。若捕获到子类异常后,就无需捕获父类异常了;若没有,则再捕获父类发生的异常。初次之外,还可以用hasattr方法来判断错误中是否包含code属性来完善,完整的代码如下:

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容