标签:
异常处理具体见:【循序渐进学Python】9.异常处理
环境平台:Python2.7.9 + Win8.1
本篇记录一下自己写爬虫的遇到的问题,程序中批量获取图片地址,然后批量保存。由于没有设置网址打开超时,导致程序一直卡在哪里,程序处于假死状态。
经查询得知没有对程序进行超时处理,由于使用的是urllib模块的urlopen,无法直接添加timeout参数(注:python2.6之前的urllib2模块也无法添加timeout参数)
1 import socket 2 import urllib2 3 4 socket.setdefaulttimeout(seconds) 5 open = urllib.urlopen("http://*****.com") 6 7 #通过socket.setdefaulttimeout() 设置了全局默认超时时间,从而给urllibe.urlopen()也设置了默认的超时时间
Python urllib2设置超时并处理超时异常
最简单的情况是捕获urllib2.URLError
1 try: 2 urllib2.urlopen("http://example.com", timeout = 1) 3 except urllib2.URLError, e: 4 raise MyException("There was an error: %r" % e)
以下代码对超时异常进行了捕获
1 import urllib2 2 import socket 3 4 class MyException(Exception): 5 pass 6 7 try: 8 urllib2.urlopen("http://example.com", timeout = 1) 9 except urllib2.URLError, e: 10 if isinstance(e.reason, socket.timeout): 11 raise MyException("There was an error: %r" % e) 12 else: 13 # reraise the original error 14 raise
下面是自己爬虫程序内的一部分,仅仅做了简单的捕获处理。
1 def saveImg(self, imageURL, fileName): 2 try: 3 u = urllib2.urlopen(imageURL, timeout=10) 4 data = u.read() 5 f = open(fileName, ‘wb‘) 6 f.write(data) 7 print u"正在保存美女图片", fileName 8 f.close() 9 except Exception, e: 10 print e
标签:
原文地址:http://www.cnblogs.com/nju2014/p/4671872.html