異常處理具體見:【循序漸進學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