我在for
循环中有一个抓取代码,但它需要几个小时才能完成,并且当我的Internet连接中断时程序停止。我(我认为)需要的是刮刀开头的条件,它告诉Python继续尝试。
我尝试使用here的答案:
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在迭代中等待连接?
编辑:如果您能编写至少一些必要的命令并告诉我应该在我的代码中放置哪些命令,我将不胜感激,因为我从未处理过异常循环。< / p>
编辑 - 解决方案我应用了Abhishek Jebaraj的修改后的解决方案。我刚刚添加了一个非常简单的异常处理命令:
except:
print "connection interrupted"
time.sleep(30)
另外,Jebaraj的getcode命令会引发错误。在r.getcode之前,我使用了这个:
import urllib
r = urllib.urlopen("http: the site ")
this question的最佳答案也帮助了我。
答案 0 :(得分:0)
写另一个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