Pthon while无限循环不能继续下去的原因?
编写了一个采集百度百科的所有链接的程序,用的while无限循环,为什么运行后只能循环几十次甚至几次,最多一次是200多次,然后就停止不动了,没有任何报错,电脑也不卡
附上代码:
from urllib.request import urlopenfrom urllib.error import HTTPError, URLError
from bs4 import BeautifulSoup
from random import randint
import re
def getLinks(url):
try:
html = urlopen(url)
soup = BeautifulSoup(html.read(), 'html.parser')
links = soup.find('', {'class' : 'body-wrapper'})\
.findAll('a', {'href' : re.compile('^/item/.*?(/[0-9]+|)$')})
except (HTTPError, URLError, AttributeError):
return None
return links
url = 'https://baike.baidu.com/item/%E6%88%91%E6%98%AF%E8%B0%812015'
links = getLinks(url)
base_site = 'https://baike.baidu.com'
i = 1
while True:
while True:
new_link = base_site + links[randint(0, len(links) - 1)].attrs['href']
count = len(getLinks(new_link))
if count >= 3:
break
print(i, new_link)
i += 1
links = getLinks(new_link)
回答:
两层循环,外层有print但是没有输出,没有报错,显然是因为一直在内层的while循环中了,也就是你的内层break条件不成立
回答:
会不会是 ssl 的原因
回答:
下面这段代码如果获取内容异常会返回一个 None,links 的值为 None,从而死循环的这段代码出错 new_link = base_site + links[randint(0, len(links) - 1)].attrs['href']
,导致死循环终止。
def getLinks(url): try:
html = urlopen(url)
soup = BeautifulSoup(html.read(), 'html.parser')
links = soup.find('', {'class' : 'body-wrapper'})\
.findAll('a', {'href' : re.compile('^/item/.*?(/[0-9]+|)$')})
except (HTTPError, URLError, AttributeError):
return None
return links
以上是 Pthon while无限循环不能继续下去的原因? 的全部内容, 来源链接: utcz.com/a/164544.html