码迷,mamicode.com
首页 > 编程语言 > 详细

python笔记——爬虫3

时间:2015-11-01 16:38:00      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

URLError

URLerror产生原因:

  • 网络未连接(即不能上网)
  • 服务器不存在

我们一般通过try-except语句来包围并捕获相应的异常。我们先尝试一下:

1 import urllib2
2 request=urllib2.Request(http://www.wujiadong.com)
3 try: urllib2.urlopen(request)
4 except urllib2.URLError,e:
5    print(e.reason)

技术分享

HTTPError

在你利用urlopen方法发出一个请求时,服务器上都会对应一个应答对象response,其中它包含

一个数字”状态码。例如:假如response是一个"重定向",需要客户端从别的地址获取文档,

urllib2将为你处理。其他不能处理的,urlopen会产生一个HTTPError。

典型的错误包含"404"(页面无法找到),"403"(请求禁止),和"401"(带验证请求)。

HTTP状态码表示HTTP协议所返回的响应的状态。

比如客户端向服务器发送请求,如果成功地获得请求的资源,则返回的状态码为200,表示响应成功。

如果请求的资源不存在, 则通常返回404错误。 

HTTP状态码通常分为5种类型,分别以1~5五个数字开头,由3位整数组成:

 1     100:继续  客户端应当继续发送请求。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。
 2 
 3     101: 转换协议  在发送完这个响应最后的空行后,服务器将会切换到在Upgrade 消息头中定义的那些协议。只有在切换新的协议更有好处的时候才应该采取类似措施。
 4 
 5     102:继续处理   由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。
 6 
 7     200:请求成功      处理方式:获得响应的内容,进行处理
 8 
 9     201:请求完成,结果是创建了新资源。新创建资源的URI可在响应的实体中得到    处理方式:爬虫中不会遇到
10 
11     202:请求被接受,但处理尚未完成    处理方式:阻塞等待
12 
13     204:服务器端已经实现了请求,但是没有返回新的信 息。如果客户是用户代理,则无须为此更新自身的文档视图。    处理方式:丢弃
14 
15     300:该状态码不被HTTP/1.0的应用程序直接使用, 只是作为3XX类型回应的默认解释。存在多个可用的被请求资源。    处理方式:若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃
16     301:请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源    处理方式:重定向到分配的URL
17 
18     302:请求到的资源在一个不同的URL处临时保存     处理方式:重定向到临时的URL
19 
20     304:请求的资源未更新     处理方式:丢弃
21 
22     400:非法请求     处理方式:丢弃
23 
24     401:未授权     处理方式:丢弃
25 
26     403:禁止     处理方式:丢弃
27 
28     404:没有找到     处理方式:丢弃
29 
30     500:服务器内部错误  服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现。
31 
32     501:服务器无法识别  服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。
33 
34     502:错误网关  作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
35 
36     503:服务出错   由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。
     HTTPError实例产生后会有一个整型‘code‘属性,是服务器发送的相关错误号。
   Error Codes错误码
   因为默认的处理器处理了重定向(300以外号码),并且100-299范围的号码指示成功,所以你只能看到400-599的错误号码。
1 import urllib2
2 request=urllib2.Request(http://bbs.csdn.net/callmewhy)
3 try: urllib2.urlopen(request)
4 except urllib2.URLError,e:
5    print(e.code)
6 #  print(e.reason)
7 # print(e.read())

技术分享

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

方法一:加入 hasattr属性提前对属性进行判断,来处理异常

 1 from urllib2 import Request,urlopen,URLError,HTTPError
 2 request=Request(http://blog.csdn.net/cqcre)
 3 try:
 4    response=urlopen(request)
 5 
 6 except URLError,e:
 7 
 8    if hasattr(e,code):
 9       print(the server couldn\‘t fulfill the request)
10       print(Error code:,e.code)
11    elif hasattr(e,reason):
12       print(we failed to reach a server)
13       print(Reason:,e.reason)
14 else:
15    print(no exception was raised)
16    # everything is ok

技术分享

方法二:

 

本篇博文为学习爬虫的笔记,内容基本是来自以下两篇博文,小部分有改动:

http://blog.csdn.net/pleasecallmewhy/article/details/8923725

http://cuiqingcai.com/961.html

 

python笔记——爬虫3

标签:

原文地址:http://www.cnblogs.com/wujiadong2014/p/4928036.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!