news_dfs = pd.DataFrame() for i in range(1,10000): while True: try: page = i url = URL.format(page)###################变更点 news_df = GetOnePageInfo(url) news_dfs = news_dfs.append(news_df) news_dfs['Pubtime'] = pd.to_datetime(news_dfs['Pubtime']) print("第{}页爬取完成".format(i)) except: print("模块运行失败,正在重试...") time.sleep(5) continue else: break if news_dfs['Pubtime'].min() < pd.to_datetime('2022-06-01'): break news_dfs = news_dfs.reset_index(drop=True)如何设置当i重新运行5次后还是失败,直接跳出整个循环,执行循环之后的模块
时间: 2024-02-10 17:14:31 浏览: 106
您可以在 while 循环中添加一个计数器,记录尝试获取数据的次数,当计数器达到一定次数,比如 5 次,就直接跳出 while 循环和 for 循环,执行之后的代码。可以使用 break 和嵌套循环实现,具体代码如下:
```
news_dfs = pd.DataFrame()
for i in range(1,10000):
retry_count = 0 # 尝试获取数据的次数
while retry_count < 5:
try:
page = i
url = URL.format(page)
news_df = GetOnePageInfo(url)
news_dfs = news_dfs.append(news_df)
news_dfs['Pubtime'] = pd.to_datetime(news_dfs['Pubtime'])
print("第{}页爬取完成".format(i))
break # 获取数据成功,跳出 while 循环
except:
retry_count += 1
print("模块运行失败,正在重试...")
time.sleep(5)
else:
# 尝试次数超过 5 次,跳出 for 循环
print("获取数据失败,尝试次数超过 5 次,跳出循环")
break
if news_dfs['Pubtime'].min() < pd.to_datetime('2022-06-01'):
break
news_dfs = news_dfs.reset_index(drop=True)
```
在这个代码中,使用了一个 else 语句,这个语句会在 while 循环正常退出时执行,也就是说,如果 retry_count 小于 5,说明获取数据成功,就会执行 break 跳出 while 循环,else 语句不会执行;如果 retry_count 等于 5,说明获取数据失败,就会执行 else 语句,跳出 for 循环,执行之后的代码。
阅读全文