玩转python爬虫之URLError异常处理

本节在这里主要说的是urlerror还有httperror,以及对它们的一些处理。

1.URLError

首先解释下URLError可能产生的原因:

网络无连接,即本机无法上网 连接不到特定的服务器 服务器不存在

在代码中,我们需要用try-except语句来包围并捕获相应的异常。下面是一个例子,先感受下它的风骚

import urllib2 requset = urllib2.Request('http://www.xxxxx.com')try:  urllib2.urlopen(requset)except urllib2.URLError, e:  print e.reason

登录后复制

我们利用了 urlopen方法访问了一个不存在的网址,运行结果如下:

[Errno 11004] getaddrinfo failed

登录后复制

它说明了错误代号是11004,错误原因是 getaddrinfo failed

立即学习“Python免费学习笔记(深入)”;

2.HTTPError

HTTPError是URLError的子类,在你利用urlopen方法发出一个请求时,服务器上都会对应一个应答对象response,其中它包含一个数字”状态码”。举个例子,假如response是一个”重定向”,需定位到别的地址获取文档,urllib2将对此进行处理。

其他不能处理的,urlopen会产生一个HTTPError,对应相应的状态吗,HTTP状态码表示HTTP协议所返回的响应的状态。下面将状态码归结如下:

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属性,这就是是服务器发送的相关错误号。
因为urllib2可以为你处理重定向,也就是3开头的代号可以被处理,并且100-299范围的号码指示成功,所以你只能看到400-599的错误号码。

下面我们写一个例子来感受一下,捕获的异常是HTTPError,它会带有一个code属性,就是错误代号,另外我们又打印了reason属性,这是它的父类URLError的属性。

import urllib2 req = urllib2.Request('http://blog.csdn.net/cqcre')try:  urllib2.urlopen(req)except urllib2.HTTPError, e:  print e.code  print e.reason

登录后复制

运行结果如下

403Forbidden

登录后复制

错误代号是403,错误原因是Forbidden,说明服务器禁止访问。

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

import urllib2 req = urllib2.Request('http://blog.csdn.net/cqcre')try:  urllib2.urlopen(req)except urllib2.HTTPError, e:  print e.codeexcept urllib2.URLError, e:  print e.reasonelse:  print "OK"

登录后复制

如果捕获到了HTTPError,则输出code,不会再处理URLError异常。如果发生的不是HTTPError,则会去捕获URLError异常,输出错误原因。

另外还可以加入 hasattr属性提前对属性进行判断,代码改写如下

import urllib2 req = urllib2.Request('http://blog.csdn.net/cqcre')try:  urllib2.urlopen(req)except urllib2.URLError, e:  if hasattr(e,"code"):    print e.code  if hasattr(e,"reason"):    print e.reasonelse:  print "OK"

登录后复制

首先对异常的属性进行判断,以免出现属性输出报错的现象。

以上,就是对URLError和HTTPError的相关介绍,以及相应的错误处理办法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2535743.html

(0)
上一篇 2025年3月5日 23:04:58
下一篇 2025年3月5日 23:05:10

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 玩转python爬虫之cookie使用方法

    之前一篇文章我们学习了爬虫的异常处理问题,那么接下来我们一起来看一下cookie的使用。 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些…

    2025年3月5日
    200
  • 使用Python的PIL模块来进行图片对比

    在使用google或者baidu搜图的时候会发现有一个图片颜色选项,感觉非常有意思,有人可能会想这肯定是人为的去划分的,呵呵,有这种可能,但是估计人会累死, 开个玩笑,当然是通过机器识别的,海量的图片只有机器识别才能做到。 那用python…

    编程技术 2025年3月5日
    200
  • python编码最佳实践之总结

    相信用python的同学不少,本人也一直对python情有独钟,毫无疑问python作为一门解释性动态语言没有那些编译型语言高效,但是python简洁、易读以及可扩展性等特性使得它大受青睐。  工作中很多同事都在用python,但往往很少有…

    编程技术 2025年3月5日
    200
  • Python在Console下显示文本进度条的方法

    进度条实现原理 进度条和一般的print区别在哪里呢?答案就是print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过stdout输出的东西依旧保留,而且保证我们在下面看到最新的输出结果。进度条不然,我们必…

    编程技术 2025年3月5日
    200
  • Python的GUI框架PySide的安装配置教程

    (一)说在前面     Python自带了GUI模块Tkinter,只是界面风格有些老旧。另外就是各种GUI框架了。     之前安装过WxPython,并做了简单的界面。遂最近又重新搜索了一下网上关于Python GUI框架的问题,发现还…

    2025年3月5日
    200
  • 学习python之编写简单乘法口诀表实现代码

    实现代码一、 #!/usr/bin/pythonx,y=9,9 lst=[(x,y,str(y)+’X’+str(x)+’=’+str(x*y)) for x in range(1,y+1) for y in range(1,x+1)]fo…

    编程技术 2025年3月5日
    200
  • 轻松实现python搭建微信公众平台

    本文主要是一步一步教大家如何利用python搭建微信公众平台,有兴趣的朋友可以参考一下 使用的工具,python 新浪SAE平台,微信的公众平台 你需要先在微信的公众平台与新浪SAE平台上各种注册,微信平台注册的时候需要你拍张手持身份证的照…

    2025年3月5日 编程技术
    200
  • 十条建议帮你提高Python编程效率

    程序员的时间很宝贵,python这门语言虽然足够简单、优雅,但并不是说你使用python编程,效率就一定会高。要想节省时间、提高效率,还是需要注意很多地方的。 今天就与大家分享资深Python程序员总结的10点建议,帮助大家大幅节省开发时间…

    2025年3月5日
    200
  • Python批量创建迅雷任务及创建多个文件

    其实不是真的创建了批量任务,而是用python创建一个文本文件,每行一个要下载的链接,然后打开迅雷,复制文本文件的内容,迅雷监测到剪切板变化,弹出下载全部链接的对话框~~ 实际情况是这样的,因为用python分析网页非常,比如下载某页中的全…

    编程技术 2025年3月5日
    200
  • bpython 功能强大的Python shell

    python是一个非常实用、流行的解释型编程语言,其优势之一就是可以借助其交互的shell进行探索式地编程。你可以试着输入一些代码,然后马上获得解释器的反馈,而不必专门写一个脚本。但是python自带的shell也有一些局限性,例如无法自动…

    2025年3月5日
    200

发表回复

登录后才能评论