【问题标题】:storing links of a site in a tree将站点的链接存储在树中
【发布时间】:2010-09-07 12:27:17
【问题描述】:

我正在尝试将我从站点中抓取的链接存储在非二叉树中。链接是分层布局的(显然)。问题是如何生成树?我的意思是,我将如何浏览链接提供的页面,以便我知道谁是谁的孩子。

现在我可以获得第一级和第二级链接,但不知道如何从这里开始,除了我必须递归地构建它并且有办法在我到达叶子时停止(我有)。

我当时的想法是(Python 中的代码):

def buildTree(root):
for node in root.children:
    if <end condition here>:
        continue
    else:
        nodes = getNodes(urllib2.urlopen(node.url).read())
        node.addChildren(nodes)
        buildTree(node)

其中根和节点是用户定义的节点

【问题讨论】:

  • 只是为了确保我对您的理解正确,您基本上是想对整个站点进行爬网并创建源自父链接的所有链接的家谱?你走在正确的轨道上,但听起来你有两件事让你感到困惑——存储信息的数据结构,以及如何编写递归函数。之后你想对数据做什么?可视化它?序列化它?
  • 你说得对,我想遍历整个站点并创建树。递归函数我想我明白了,但我不确定数据结构,一棵树是否适合这个。

标签: algorithm tree


【解决方案1】:

显然,网站中的链接不是树,而是图表。您应该有一个由 URL 标识的 Page 对象和一个从一个页面指向另一个页面的 Link 对象(并且页面 A 可以指向页面 B,而页面 B 指向页面 A,使其成为一个图形,而不是一棵树)。

扫描算法伪代码:

process_page(current_page):
    for each link on the current_page: 
    if target_page is not already in your graph:
        create a Page object to represent target_page
        add it to to_be_scanned set
    add a link from current_page to target_page

scan_website(start_page)
    create Page object for start_page
    to_be_scanned = set(start_page)
    while to_be_scanned is not empty:
        current_page = to_be_scanned.pop()
        process_page(current_page)

【讨论】:

  • 是的,它完全是一个图表,而不是一棵树。谢谢!
猜你喜欢
  • 2012-03-17
  • 1970-01-01
  • 2019-06-15
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 2020-03-07
相关资源
最近更新 更多