2012-05-12 35 views
0

我需要抓取具有基本文件夹系统的网站,其中包含关键字的文件夹 - 某些文件夹包含文本文件。我需要扫描所有页面(文件夹)并检查指向新文件夹的链接,记录关键字和文件。我的主要问题是更抽象:如果有一个包含嵌套文件夹和未知“深度”的目录,那么最重要的pythonc方法是遍历它们。 [如果“深度”是已知的,则对于循环而言将是非常简单的)。想法大大appriciated。HTML抓取:通过嵌套目录迭代

回答

2

这是一个简单的蜘蛛算法。它使用文档的deque要处理和一组已经处理过的文件:

active = deque() 
seen = set() 

active.append(first document) 

while active is not empty: 
    document = active.popleft() 
    if document in seen: 
     continue 

    # do stuff with the document -- e.g. index keywords 

    seen.add(document) 
    for each link in the document: 
     active.append(link) 

注意,这是迭代的,因此不能以任意深度的树工作。

+0

谢谢你的回答 - 它运作良好。但我认为有一个错误:deque对象没有添加属性,它应该追加。 – root

+0

@priilane:不客气。我的文章是相当伪代码比python工作...然而,修复。 – georg

2

递归通常是最简单的方法。

但是,如果某人创建了一个带有符号链接的目录,它可能会在一段时间后给你一个StackOverflowError。

+0

谢谢你的回答。在我看来,这两个问题的答案都可以解决问题。但是,由于我对Python /递归相当新,所以您可能会提供一小段(伪)代码,以便比较这两个选项。 – root