检测Python urllib2 urlopen中的超时错误
我对Python还比较陌生,所以如果这个问题很简单,我先说声抱歉。
我想问的是关于urllib2库和它的urlopen函数的事情。目前我用这个来从另一个服务器加载大量页面(它们都在同一个远程主机上),但我的脚本有时会因为超时错误而被终止(我猜是因为请求太大了)。
有没有办法让脚本在超时后继续运行?我希望能获取到所有页面,所以我想要一个能不断尝试直到成功获取页面的脚本,然后再继续处理下一个。
另外,保持与服务器的连接一直打开会有帮助吗?
2 个回答
1
你可以看看urllib2的缺失手册,这可能对你有帮助。
2
下次出现错误时,记得注意错误信息。最后一行会告诉你是什么类型的异常。比如,它可能是一个 urllib2.HTTPError
。一旦你知道了抛出的异常类型,就可以在 try...except
代码块中捕获它。比如:
import urllib2
import time
for url in urls:
while True:
try:
sock=urllib2.urlopen(url)
except (urllib2.HTTPError, urllib2.URLError) as err:
# You may want to count how many times you reach here and
# do something smarter if you fail too many times.
# If a site is down, pestering it every 10 seconds may not
# be very fruitful or polite.
time.sleep(10)
else:
# Success
contents=sock.read()
# process contents
break # break out of the while loop