Python中While循环未正常运行:无法正确重试获取目标元素
问题分析:循环重试未更新Soup导致逻辑失效
嘿,我一眼就发现问题所在啦!你的代码里有个关键的逻辑漏洞——你在循环外部只做了一次请求和Soup解析,之后的循环里完全没有更新soup对象!
咱们来拆解下问题根源:
- 你第一次发起请求并解析得到soup后,这个soup就固定是第一次请求的页面内容了
- 之后每次循环判断的都是这个旧的soup,哪怕目标页面已经更新出了你要找的元素,你的代码也不会去重新获取新的页面内容
- 所以如果第一次请求没找到目标元素,循环就会一直重复判断旧的结果,永远跳不出去
修正后的代码
import time from bs4 import BeautifulSoup # 把请求和解析逻辑放到循环内部,每次重试都拉取最新页面 while True: r = self.session.get(url, headers=headers) soup = BeautifulSoup(r.content, "html.parser") if soup.find_all('div', {'class': 'function'}): print ('Found soup...') break time.sleep(3) print ('Not Found... Trying again.')
额外健壮性建议
为了避免无限循环(比如页面永远不会出现目标元素的极端情况),最好给重试加个次数限制,防止程序一直挂起:
max_retries = 10 retry_count = 0 while retry_count < max_retries: r = self.session.get(url, headers=headers) soup = BeautifulSoup(r.content, "html.parser") if soup.find_all('div', {'class': 'function'}): print ('Found soup...') break retry_count += 1 time.sleep(3) print (f'Not Found... Trying again. Retry {retry_count}/{max_retries}') else: print("Max retries reached, target element not found.")
内容的提问来源于stack exchange,提问作者Mister
相关产品推荐
相关产品推荐

