Python爬虫入门四

详解HTTPError

我们在写爬虫去请求服务器的时候可能会遇到各种各样的错误,在HTTP协议中常用的客户端错误码如下

  • 400 坏请求(Bad Request)
  • 401未授权(Unauthorized)
  • 402必须的支付(Payment Required)
  • 403禁用(Forbidden)
  • 404没有找到(Not Found)
  • 406 不可接受的 (Not Acceptable)
  • 407 需要代理验证(Proxy Authentication Required)
  • 408 请求超时(Request Timeout)
  • 409 冲突 (Confilict)
  • 410 不存在(gone)
  • 411 长度必需 (Length Required)
  • 412 先决条件失败 (Precondition Failed)
  • 413 请求实体太大
  • 414 请求 URI 太长(Request-URI Too Long
  • 415 不被支持的媒体类型(Unsupported Media Type)
  • 416 请求范围不满足 (Requested Range Not Satisfiable)
  • 417 期望失败(Expectation Failed)

  • 上面就是一些HTTP客户端的错误码,那么如何知道是发生了那个错误呢用python的try..except..就可以代码如下
import urllib2

req = urllib2.Request('http://cs.scu.edu.cn/~duanlei')
try:
    urllib2.urlopen(req)
except urllib2.HTTPError, e:
    print e.code
    print e.reason

运行后结果是 404 Not Found 。 e还有一个read()方法即可以打印错误页面,如下所示

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>404 - Not Found</title>
 </head>
 <body>
  <h1>404 - Not Found</h1>
 </body>
</html>

HTTPError在urllib2中是这么定义的class HTTPError(URLError, addinfourl):因此我们可以看出HTTPError是继承自URLError的。

详解URLError

URLError是一种IOError
通常引起URLError的原因是:无网络连接(没有到目标服务器的路由)、访问的目标服务器不存在。在这种情况下,异常对象会有reason属性(是一个(错误码、错误原因)的元组)
可以通过下面代码来打印URLError异常

import urllib2

url="http://www.baidu.com/"
try:
    response=urllib2.urlopen(url)
except urllib2.URLError,e:
    print e.reason

就是把上面的HTTPError改成了URLError

处理URLError的方式就是在代码中捕捉它们然后做响应的处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值