urllib2的异常处理

异常处理正则表达式

做为爬虫的抓取过程基本就那么多内容了,后面再将一些正则表达式的东西简单介绍一下基本就完事了,下面先说说异常处理的方法。先介绍一下抓取过程当中的主要异常,如URLError和HTTPError。编程

URLError可能产生的缘由主要有:网络无链接,即本机没法上网;链接不到特定的服务器;服务器不存在等。以下所示:浏览器

 

 

错误代号是11004,错误缘由是getaddrinfo failed。这类错误相对来讲比较少,理由是在咱们抓取网页时,通常都会人工经过浏览器访问一遍,而最为常见的是HTTPError。服务器

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

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

 

 

HTTPError实例产生后会有一个code属性,这就是服务器发送的相关错误号。由于urllib2能够为你处理重定向,也就是3开头的代号能够被处理,而且100~299范围的号码指示成功,因此咱们只能看到400~599的错误号码。另外可能还会遇到1005三、10060等状态码,通常都是服务器不稳定形成的,多刷新几回就行了。spa

捕获的异常是HTTPError,它会带有一个code属性,就是错误代号,另外咱们又打印了reason属性,这就是它的父类URLError的属性。.net

 

 

错误代号是403,错误缘由是Forbidden,说明服务器禁止访问。日志

咱们知道,HTTPError的父类是URLError,根据编程经验,父类的异常应当写到子类异常的后面,若是子类捕获不到,那么能够捕获父类的异常,因此上述的代码能够改写为:code

 

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

不过,就我我的而言,我不喜欢单独捕获该类异常,由于在实际应用过程当中,会出项各类各样的异常,爬虫任务每每都是几天几夜的连续工做,咱们又不可能24小 时盯着,因此一旦异常捕获不到就会形成爬虫程序的崩溃,而若是你尚未设置相关爬取进度的日志,这基本就是个失败的任务。因此在爬虫中,异常的捕获一般不 仅仅是报告异常的缘由,更重要的是加强程序的健壮性,不至于因异常而崩溃,因此一般个人作法就是从全局角度捕获全部异常。

 

能够在异常捕获后记录到log日志文件中,待全部任务初步完成后,能够再对log日志里有问题的内容进行二次处理。

相关文章
相关标签/搜索