我对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的缺失手册 可能会帮助您

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top