2017-04-23 87 views
0

我在Python中使用BeautifulSoup4编写了一个程序,该程序从随机维基百科文章开始,仅抓取段落部分中的前两个链接。我想创建一棵树,在那里获取随机文章的前两个链接,然后转到这两个链接并抓取这些页面上的前两个链接,依此类推。自然地,使用递归是有意义的,但我被卡住了。Python中的递归网站树

这里是我的抽象代码:

def tree(link): 
    branch = get_links(link) # Function returns the first two links on the article in a list of strings 
    return tree(branch[0]), tree(branch[1]) 

origin = get_random_article() # Returns a link to a random Wikipedia article as a string 

links = tree(origin) 

此代码创建一个无限循环,很显然,我需要某种形式的迭代过程,或循环,以限制它。

这里是我的坚持是什么:

  1. 我需要某种限制的,以有多少分支创建,所以也没有无限循环
  2. 的一种方式返回所有的链接它发现一旦它创建了指定数量的分支

我将输出一个文件或某事的数据,但现在,任何关于如何创建这棵树的帮助非常感谢。

谢谢你在前进,

卢卡斯

+0

你可以保持全局计数器或传递一个额外的参数的极限 –

+1

不知道的方法,为什么你使用beautifulsoup独自做到这一点。 https://docs.scrapy.org/en/latest/faq.html –

回答

0

使用队列或堆栈。从随机文章开始获取两个链接,将它们添加到队列中。从队列中获取一个链接,然后重复。无论何时从队列中获取文章,都会增加计数。如果计数大于您想要的限制,请停止。

然而,正如@ cricket_007提到尝试scrapy

+1

或者一个堆栈,取决于“深度优先”vs“宽度优先” –

+1

谢谢。这帮助我弄明白了。 – Lukesta72