Python爬虫入门四

来源:互联网 发布:arm体系结构与编程 pdf 编辑:程序博客网 时间:2024/04/30 02:29

详解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 urllib2req = 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 urllib2url="http://www.baidu.com/"try:    response=urllib2.urlopen(url)except urllib2.URLError,e:    print e.reason

就是把上面的HTTPError改成了URLError

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

1 0
原创粉丝点击