在VSCode中运行Web爬网程序,出现错误:无法从堆栈溢出中恢复

问题描述 投票:0回答:1

我写了一个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           
python web-crawler stack-overflow
1个回答
0
投票

这仅表示您具有深层递归,并且它用完了堆栈空间。您可以添加一些东西来控制递归深度,也可以将其更改为更具迭代性的方法。这就是为什么具有较小递归深度的简单网站就可以了。

我将使用带有while循环的迭代方法,并将需要处理的任何“新” URL推入列表,并且当该列表不为空时,拉出一个进行爬网并重复。

© www.soinside.com 2019 - 2024. All rights reserved.