r = self.session.get(url, headers=headers)
soup = BeautifulSoup(r.content, "html.parser")
while True:
if soup.find_all('div', {'class': 'function'}):
break
time.sleep(3)
print ('Not Found... Trying again.')
print ('Found soup...')
找不到while
时的soup.find_all
循环应该重试,直到找到soup.find_all
。如果soup.find_all
中存在r.content
,它通常应该打印'找到汤......'但是它没有这样做,我做错了什么?
答案 0 :(得分:4)
那个循环没有意义。 find_all
可以在一次调用中找到所有内容,或者找不到任何内容,并且您将拥有无限循环(因为循环中任何内容都不会发生变化)。
所以解决方案只是不有一个循环,只使用普通的if-else
:
r = self.session.get(url, headers=headers)
soup = BeautifulSoup(r.content, "html.parser")
if soup.find_all('div', {'class': 'function'}):
print ('Found soup...')
else:
print ('Not Found... Trying again.')
如果您打算从源代码重新获取HTML,那么您需要将所有代码放在循环中:
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
else:
print ('Not Found... Trying again.')
time.sleep(3);
答案 1 :(得分:0)
soup.find_all(<HTML attribute>)
返回查询属性的实例列表,如果没有找到则返回空列表。你不需要把它放在一个循环中。所以你可以这样做:
r = self.session.get(url, headers=headers)
soup = BeautifulSoup(r.content, "html.parser")
instances = soup.find_all('div', {'class': 'function'}):
if len(instances) == 0:
print("No divs with class 'function'")
else:
print("Yay, it was a success!")