【问题标题】:HTML scraping: iterating through nested directoriesHTML 抓取:遍历嵌套目录
【发布时间】:2012-05-20 16:49:06
【问题描述】:

我需要抓取一个具有基本文件夹系统的网站,其中的文件夹标有关键字 - 一些文件夹包含文本文件。我需要扫描所有页面(文件夹)并检查指向新文件夹的链接,记录关键字和文件。我的主要问题更抽象:如果有一个包含嵌套文件夹和未知“深度”的目录,那么迭代所有这些文件夹的最pythonc 方式是什么。 [如果知道“深度”,那将是一个非常简单的 for 循环)。想法非常受欢迎。

【问题讨论】:

    标签: python html iteration web-scraping


    【解决方案1】:

    这是一个简单的蜘蛛算法。它使用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)
    

    请注意,这是迭代的,因此可以与任意深度树一起使用。

    【讨论】:

    • 感谢您的回答 - 它运行良好。但是我认为有一个错误:双端队列对象没有添加属性,它应该是附加的。
    • @priilane:不客气。我的帖子是伪代码而不是工作 python...不过,已修复。
    【解决方案2】:

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

    但是,如果有人创建了一个带有指向自身或父级的符号链接的目录,则可能会在一段时间后给您一个 StackOverflowError。

    【讨论】:

    • 感谢您的回答。在我看来,这个问题的两个答案都可以解决问题。但是,由于我对 Python/递归相当陌生,您是否可以提供一个小的(伪)代码 sn-p 以便更容易比较这两个选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 2017-07-25
    • 2021-05-28
    相关资源
    最近更新 更多