如何使脚本在迭代中等待,直到重新建立Internet连接?

问题描述:

我在for循环中有一个刮码,但它需要几个小时才能完成,并且当我的互联网连接断开时程序停止。我想(我)需要的是刮板开始时的一个条件,它告诉Python在这一点上继续尝试。 我试图使用回答here如何使脚本在迭代中等待,直到重新建立Internet连接?

for w in wordlist: 

#some text processing, works fine, returns 'textresult' 

    if textresult == '___': #if there's nothing in the offline resources 
     bufferlist = list() 
     str1=str() 
     mlist=list() # I use these in scraping 

     br = mechanize.Browser() 

     tried=0 
     while True: 
      try: 
       br.open("http://the_site_to_scrape/") 

       # scraping, with several ifs. Each 'for w' iteration results with scrape_result string. 


      except (mechanize.HTTPError, mechanize.URLError) as e: 
       tried += 1 
       if isinstance(e,mechanize.HTTPError): 
        print e.code 
       else: 
        print e.reason.args 
      if tried > 4: 
        exit() 
        time.sleep(120) 
        continue 
      break 

作品,而我在网上。当连接断开时,Python写入403代码并从wordlist跳过该单词,转到下一个并执行相同的操作。我如何告诉Python在迭代中等待连接?

编辑:如果你至少可以编写一些必要的命令并告诉我它们应该放在我的代码中,我会感激它,因为我从来没有处理异常循环。

编辑 - 解决方案我应用了Abhishek Jebaraj的改进解决方案。我只是添加了一个非常简单的异常处理命令:

except: 
    print "connection interrupted" 
    time.sleep(30) 

此外,Jebaraj的getcode命令将引发错误。 r.getcode之前,我用这个:

import urllib 

r = urllib.urlopen("http: the site ") 

顶部答案this question帮助我的。

+1

检查'状态/ 10!= 20',并不断重试循环。只需将所有内容放入for循环中,并在'while(retry)'循环中修改为false的重试值为2xx状态 – ishaan

写另一个while循环,其中将继续试图连接到互联网。

只有当它接收到200的状态码,然后你才能继续你的程序时它才会中断。

有点像

retry = True 
while retry: 
    try: 
     r = br.open(//your site) 
     if r.getcode()/10==20: 
      retry = False 
    except: 
      // code to handle any exception 

// rest of your code 
+0

这是在'while True:'内写入我的问题? 和/ /处理任何异常的代码可以在我的问题相同? – Tag

+0

是的,它进入你的问题的while循环内,//处理的代码是你想要的任何东西..也许你想在连续的连接错误期间打破它..或者你可以将它传递给你.. –

+0

相同的逻辑在我最近的编辑,只是使它更短一点..基于ishaans答案在评论.. –