在Python的urllib2 urlopen中检测超时错误

时间:2010-08-18 17:56:50

标签: python urllib2 urlopen

我仍然相对较新的Python,所以如果这是一个显而易见的问题,我道歉。

我的问题是关于urllib2库,它是urlopen函数。目前我正在使用它来加载来自另一台服务器的大量页面(它们都在同一个远程主机上),但是脚本会偶尔被超时错误杀死(我假设这是来自大型请求)。

有没有办法让脚本在超时后继续运行?我希望能够获取所有页面,所以我想要一个不断尝试的脚本,直到它获得一个页面,然后继续前进。

在旁注中,是否会保持连接对服务器的帮助?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

The missing manual of urllib2可能会帮助您