检测Python urllib2 urlopen中的超时错误

3 投票
2 回答
3417 浏览
提问于 2025-04-16 02:59

我对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

撰写回答