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

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)


回答:

两层循环,外层有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

回到顶部