在我们用Python的requests模块进行爬虫时,一个简单高效的模块就是requests模块,利用get()或者post()函数,发送请求。
————————————————
但是在真正的实际使用过程中,我们可能会遇到网络的各种变化,可能会导致请求过程发生各种未知的错误导致程序中断,这就使我们的程序不能很好的去处理错误。所以为了使我们的程序在请求时遇到错误,可以捕获这种错误,就要用到try…except方法,以及了解requests可能发生的各种错误。
- 连接超时
服务器在指定时间内没有应答,抛出
requests.exceptions.ConnectTimeout
- 连接、读取超时
若分别指定连接和读取的超时时间,服务器在指定时间没有应答,抛出
requests.exceptions.ConnectTimeout
**- timeout=([连接超时时间], [读取超时时间])
- 连接:客户端连接服务器并并发送http请求服务器
- 读取:客户端等待服务器发送第一个字节之前的时间**
- 未知的服务器
抛出
requests.exceptions.ConnectionError
- 代理连接不上
代理服务器拒绝建立连接,端口拒绝连接或未开放,抛出
requests.exceptions.ProxyError
- 连接代理超时
代理服务器没有响应
requests.exceptions.ConnectTimeout
- 代理读取超时
说明与代理建立连接成功,代理也发送请求到目标站点,但是代理读取目标站点资源超时。即使代理访问很快,如果代理服务器访问的目标站点超时,这个锅还是代理服务器背 。假定代理可用,timeout就是向代理服务器的连接和读取过程的超时时间,不用关心代理服务器是否连接和读取成功
- 网络环境异常
可能是断网导致,抛出
requests.exceptions.ConnectionError
- 官网的一些参考
你可以告诉 requests 在经过以 timeout
参数设定的秒数时间之后停止等待响应。基本上所有的生产代码都应该使用这一参数。如果不使用,你的程序可能会永远失去响应:
requests.get(‘http://github.com’, timeout=0.001) Traceback (most
recent call last): File “”, line 1, in
requests.exceptions.Timeout: HTTPConnectionPool(host=‘github.com’,
port=80): Request timed out. (timeout=0.001)
并不是整个下载响应的时间限制,而是如果服务器在 timeout 秒内没有应答,将会引发一个异常(更精确地说,是在 timeout 秒内没有从基础套接字上接收到任何字节的数据时)
遇到网络问题(如:DNS 查询失败、拒绝连接等)时,Requests 会抛出一个
requests.exceptions.ConnectionError
异常。
如果 HTTP 请求返回了不成功的状态码, Response.raise_for_status() 会抛出一个HTTPError
异常。
若请求超时,则抛出一个
Timeout
异常。
若请求超过了设定的最大重定向次数,则会抛出一个TooManyRedirects
异常。
所有Requests显式抛出的异常都继承自
requests.exceptions.RequestException