异常处理概述
爬虫在运行的过程中,很多时候都会遇到这样或那样的异常。如果没有异常处理,爬虫遇到异常的时候就会直接奔溃停止运行,下次再运行的时候又会从头开始,所以,要开发一个具有顽强生命力的爬虫,必须进行异常处理。
常见状态码及含义
- 301 Moved Permanently:重定向到新的URL,永久性
- 302 Found:重定向到临时的URL,非永久性
- 304 Not Modified:请求的资源未更新
- 400 Bad Request:非法请求
- 401 Unauthorized:请求未经授权
- 403 Forbidden:禁止访问
- 404 Not Found:没有找到对应页面
- 500 Internal Server Error:服务器内部出现错误
- 501 Not Implemented:服务器不支持实现请求所需要的功能
URLError与HTTPError
两者都是异常处理的类,HTTPError是URLError的子类,HTTPError有 异常状态码与异常原因,URLError没有异常状态码,所以,在处理的时 候,不能使用URLError直接代替HTTPError。如果要代替,必须要判断 是否有状态码属性。
异常处理实战
客户端如果要与服务器端进行通信,需要通过http请求进行,http请求 有很多种,我们在此会讲post与get两种请求方式。比如登陆、搜索某 些信息的时候会用到。
import urllib
try:
data = urllib.request.urlopen("http://www.google.com",timeout=3).read()
except urllib.error.URLError as er:
print(er)
if hasattr(er,"code"):
print("error="+str(er.code))
if hasattr(er,"reason"):
print("error="+str(er.reason))