阿布云

你所需要的,不仅仅是一个好用的代理。

网络爬虫(三)

阿布云 发表于

527.png

关于HTTP的异常处理,当urlopen不能够处理一个response时,就会产生urlError.不过通常的Python APIs异常ValueError,TypeError等也会同时产生.(HTTPError是urlError的子类,通常在特定HTTP URLs中产生)
1.URLError
URLError一般会在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生.在这种情况下,异常同样会带有"reason"的属性,它是一个tuple(可以理解为不可变的数组),包括了一个错误号和一个错误信息.

2.HTTPError
服务器上每一个HTTP 应答对象response都会包含一个数字"状态码".有的时候状态码会指出服务器无法完成请求.而默认的处理器会为你处理一部分这种应答.例如:假设response是一个"重定向",需要客户端从别的地址获取文档,urllib2将为你处理.而其他不能处理的,urlopen会产生一个HTTPError.其中典型的错误包含"404"(页面无法找到),"403"(请求禁止),和"401"(带验证请求).

HTTP状态码则表示HTTP协议所返回的响应的状态.比如客户端向服务器发送请求,如果成功地获得请求的资源,则返回的状态码为200,表示响应成功.如果请求的资源不存在,则通常返回404错误.HTTP状态码一般会分为5种类型,分别以1~5五个数字开头,由3位整数组成:

200:请求成功      处理方式:获得响应的内容,进行处理 

201:请求完成,结果是创建了新资源.新创建资源的URI可在响应的实体中得到    处理方式:爬虫中不会遇到 

202:请求被接受,但处理尚未完成    处理方式:阻塞等待 

204:服务器端已经实现了请求,但是没有返回新的信 息.如果客户是用户代理,则无须为此更新自身的文档视图.    处理方式:丢弃

300:该状态码不被HTTP/1.0的应用程序直接使用, 只是作为3XX类型回应的默认解释.存在多个可用的被请求资源.    处理方式:若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃
301:请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源    处理方式:重定向到分配的URL
302:请求到的资源在一个不同的URL处临时保存     处理方式:重定向到临时的URL 

304 请求的资源未更新     处理方式:丢弃 

401 未授权     处理方式:丢弃 

403 禁止     处理方式:丢弃 

404 没有找到     处理方式:丢弃 

5XX 回应代码以“5”开头的状态码表示服务器端发现自己出现错误,不能继续执行请求    处理方式:丢弃

HTTPError实例产生后会有一个整型'code'属性,是服务器发送的相关错误号:Error Codes错误码.因为默认的处理器处理了重定向(300以外号码),并且100-299范围的号码指示成功,所以你只能看到400-599的错误号码.
BaseHTTPServer.BaseHTTPRequestHandler.response是一个很有用的应答号码字典,它会显示HTTP协议使用的所有的应答号.当一个错误号产生后,服务器返回一个HTTP错误号,和一个错误页面.你可以使用HTTPError实例作为页面返回的应答对象response.这表示和错误属性一样,它同样包含了read,geturl,和info方法.