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 推入一个列表,当该列表不为空时,拉出一个进行爬网和重复。
我写了一个网络爬虫,它应该爬取一个域名下的所有超链接。我在一个非常简单的网页上尝试过,它有效,但是当我在一个复杂的网站上尝试它时,它 运行 半小时,最后返回此错误 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 推入一个列表,当该列表不为空时,拉出一个进行爬网和重复。