Pthon while无限循环不能继续下去的原因?

新手上路,请多包涵

编写了一个采集百度百科的所有链接的程序,用的while无限循环,为什么运行后只能循环几十次甚至几次,最多一次是200多次,然后就停止不动了,没有任何报错,电脑也不卡
附上代码:

from urllib.request import urlopen
from 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)
阅读 3k
3 个回答
新手上路,请多包涵

两层循环,外层有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
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题