python 超时异常处理
2015-07-23 21:38
706 查看
异常处理具体见:【循序渐进学Python】9.异常处理
环境平台:Python2.7.9 + Win8.1
本篇记录一下自己写爬虫的遇到的问题,程序中批量获取图片地址,然后批量保存。由于没有设置网址打开超时,导致程序一直卡在哪里,程序处于假死状态。
经查询得知没有对程序进行超时处理,由于使用的是urllib模块的urlopen,无法直接添加timeout参数(注:python2.6之前的urllib2模块也无法添加timeout参数)
Python urllib2设置超时并处理超时异常
最简单的情况是捕获urllib2.URLError
以下代码对超时异常进行了捕获
下面是自己爬虫程序内的一部分,仅仅做了简单的捕获处理。
环境平台:Python2.7.9 + Win8.1
本篇记录一下自己写爬虫的遇到的问题,程序中批量获取图片地址,然后批量保存。由于没有设置网址打开超时,导致程序一直卡在哪里,程序处于假死状态。
经查询得知没有对程序进行超时处理,由于使用的是urllib模块的urlopen,无法直接添加timeout参数(注:python2.6之前的urllib2模块也无法添加timeout参数)
import socket import urllib2 socket.setdefaulttimeout(seconds) open = urllib.urlopen("http://*****.com") #通过socket.setdefaulttimeout() 设置了全局默认超时时间,从而给urllibe.urlopen()也设置了默认的超时时间
Python urllib2设置超时并处理超时异常
最简单的情况是捕获urllib2.URLError
try: urllib2.urlopen("http://example.com", timeout = 1) except urllib2.URLError, e: raise MyException("There was an error: %r" % e)
以下代码对超时异常进行了捕获
import urllib2 import socket class MyException(Exception): pass try: urllib2.urlopen("http://example.com", timeout = 1) except urllib2.URLError, e: if isinstance(e.reason, socket.timeout): raise MyException("There was an error: %r" % e) else: # reraise the original error raise
下面是自己爬虫程序内的一部分,仅仅做了简单的捕获处理。
def saveImg(self, imageURL, fileName): try: u = urllib2.urlopen(imageURL, timeout=10) data = u.read() f = open(fileName, 'wb') f.write(data) print u"正在保存美女图片", fileName f.close() except Exception, e: print e
相关文章推荐
- python数据类型与json的互相转换
- Python下opencv使用笔记(十一)(详解hough变换检测直线与圆)
- Python单元测试框架
- python selenium中调用执行js
- python paramiko
- Python学习日志之Python模块
- python基础教程总结12——数据库
- Python入门学习笔记之Python模块
- python多进程、进程间通信、进程锁
- Python Split函数的用法总结
- Python区分raw_input()与input()
- python实现快速排序算法
- Python多进程时可以用进程池
- [笔记]python multiprocessing模块
- Python爬虫抓取csdn博客
- python 多进程
- getopt在Python中的使用(转)
- python cookielib 登录人人网
- Python的捕虫笔记
- Python的捕虫笔记