Run Web crawler in VSCode, got error: Cannot recover from stack overflow

Run Web crawler in VSCode, got error: Cannot recover from stack overflow

我写了一个网络爬虫,它应该爬取一个域名下的所有超链接。我在一个非常简单的网页上尝试过,它有效,但是当我在一个复杂的网站上尝试它时,它 运行 半小时,最后返回此错误 Cannot recover from stack overflow.

谁能帮忙看一下main函数,看看有没有什么问题?

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           

这只是意味着你有一个深度递归并且它 运行 出栈 space。您可以添加一些东西来控制递归深度,或者将其更改为更具迭代性的方法。这就是为什么一个递归深度较小的简单网站就可以了。

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