我写了一个Web搜寻器,该搜寻器应该通过一个域名下的所有超链接进行搜寻。我使用一个非常简单的网页进行了尝试,但可以正常工作,但是当我使用一个复杂的网站进行尝试时,它运行了半个小时,最后返回了此错误。无法从堆栈溢出中恢复。
有人可以帮忙看看主要功能,看看是否有什么问题吗?
visited = set()
storedlinks = set()
def crawler(url):
'Take an url, crawl all links under that domain name.'
visited.add(url)
if linkchunk in url: # Check if under the domain
storedlinks.add(url)
links = analyze(url) # analyze is function to get hyperlinks
counter = 0
for link in links: # Check new links
if link in visited: # Check if it's visited
counter += 1
if counter == len(links): # if all link in visited, then stop
break
else:
try:
print(link)
crawler(link)
except:
pass
return storedlinks
这仅表示您具有深层递归,并且它用完了堆栈空间。您可以添加一些东西来控制递归深度,也可以将其更改为更具迭代性的方法。这就是为什么具有较小递归深度的简单网站就可以了。
我将使用带有while循环的迭代方法,并将需要处理的任何“新” URL推入列表,并且当该列表不为空时,拉出一个进行爬网并重复。