python运行。py的文件时会出现missingparenthesesiscallto'print'原因:#python3的print需要括号print('hellwworld')print(2**8)python3.3.2:SyntaxError:invalidcharacterinidentifier50原因:存在中文标点符号零基础写python爬虫之HTTP异常处理先来说一说HTTP的异常处理问题。当urlopen不能够处理一个response时,产生urlError。不过通常的PythonAPIs异常如ValueError,TypeError等也会同时产生。HTTPError是urlError的子类,通常在特定HTTPURLs中产生。1.URLError通常,URLError在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生。这种情况下,异常同样会带有reason属性,它是一个tuple(可以理解为不可变的数组),包含了一个错误号和一个错误信息。我们建一个urllib2_test06.py来感受一下异常的处理:复制代码代码如下:importurllib2req=urllib2.Request(')try:urllib2.urlopen(req)excepturllib2.URLError,e:printe.reason按下F5,可以看到打印出来的内容是:[Errno11001]getaddrinfofailed也就是说,错误号是11001,内容是getaddrinfofailed2.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来访问此资源处理方式:重定向到分配的URL302:请求到的资源在一个不同的URL处临时保存处理方式:重定向到临时的URL304请求的资源未更新处理方式:丢弃400非法请求处理方式:丢弃401未授权处理方式:丢弃403禁止处理方式:丢弃404没有找到处理方式:丢弃5XX回应代码以“5”开头的状态码表示服务器端发现自己出现错误,不能继续执行请求处理方式:丢弃------------------------------------------------------------------------------------------------HTTPError实例产生后会有一个整型'code'属性,是服务器发送的相关错误号。ErrorCodes错误码因为默认的处理器处理了重定向(300以外号码),并且100-299范围的号码指示成功,所以你只能看到400-599的错误号码。BaseHTTPServer.BaseHTTPRequestHandler.response是一个很有用的应答号码字典,显示了HTTP协议使用的所有的应答号。当一个错误号产生后,服务器返回一个HTTP错误号,和一个错误页面。你可以使用HTTPError实例作为页面返回的应答对象response。这表示和错误属性一样,它同样包含了read,geturl,和info方法。我们建一个urllib2_test07.py来感受一下:复制代码代码如下:importurllib2req=urllib2.Request(')try:urllib2.urlopen(req)excepturllib2.URLError,e:printe.code#printe.read()按下F5可以看见输出了404的错误码,也就说没有找到这个页面。3.Wrapping所以如果你想为HTTPError或URLError做准备,将有两个基本的办法。推荐使用第二种。我们建一个urllib2_test08.py来示范一下第一种异常处理的方案:复制代码代码如下:fromurllib2importRequest,urlopen,URLError,HTTPErrorreq=Request(')try:response=urlopen(req)exceptHTTPError,e:print'Theservercouldn\'tfulfilltherequest.'print'Errorcode:',e.codeexceptURLError,e:print'Wefailedtoreachaserver.'print'Reason:',e.reasonelse:print'Noexceptionwasraised.'#everythingisfine和其他语言相似,try之后捕获异常并且将其内容打印出来。这里要注意的一点,exceptHTTPError必须在第一个,否则exceptURLError将同样接受到HTTPError。因为HTTPError是URLError的子类,如果URLError在前面它会捕捉到所有的URLError(包括HTTPError)。我们建一个urllib2_test09.py来示范一下第二种异常处理的方案:复制代码代码如下:fromurllib2importRequest,urlopen,URLError,HTTPErrorreq=Request(')try:response=urlopen(req)exceptURLError,e:ifhasattr(e,'code'):print'Theservercouldn\'tfulfilltherequest.'print'Errorcode:',e.codeelifhasattr(e,'reason'):print'Wefailedtoreachaserver.'print'Reason:',e.reasonelse:print'Noexceptionwasraised.'#everythingisfine