检测Python的Urllib2 urlopen中的超时误差
题
我对Python仍然相对较新,因此,如果这是一个明显的问题,我深表歉意。
我的问题是关于Urllib2库,它是urlopen函数。目前,我正在使用它来从另一台服务器中加载大量页面(它们都在同一远程主机上),但是脚本时不时被暂停错误杀死(我认为这是来自大型请求)。
有没有办法在超时后保持脚本运行?我希望能够获取所有页面,因此我想要一个脚本,该脚本将继续尝试,直到它获得页面,然后继续前进。
附带说明,可以保持与服务器的连接开放吗?
解决方案
下次发生错误时,请注意错误消息。最后一行将告诉您异常类型。例如,它可能是 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
其他提示
Urllib2的缺失手册 可能会帮助您
不隶属于 StackOverflow