可扩展的树字典 - 在python中制作地图

时间:2016-07-10 19:53:38

标签: python dictionary

我正在制作一个网站抓取工具,可以在网站抓取时对其进行映射。此映射将写入文件,以便在抛出异常时爬网程序可以恢复其位置。

树开始像这样:

{
    "root": [{}, "example.com"]
}

其他页面嵌套在空dict中,如下所示:

{
    "root": [
        {
            "categoryName1": [{}, "example.com/sub1"],
            "categoryName2": [{}, "example.com/sub2"]
        }, "example.com"
    ]
}

我正在使用以下方法扫描树中的空字典,这样我就可以将下一个网址抓取到:

class Crawler(object):
    def __init__(self):
        self.tree = { "root": [{}, 'root.example.com'] }

    def next_url(self, recursion=None):
        tree = recursion if recursion else self.tree

        for k, v in tree.iteritems():
            _path, url = v[0], v[1]
            if not len(_path):  # is empty; latest
                return url 
            else:
                self.next_url(_path)

问题

下面我正在创建一个新分支并使用提取的URL启动它。我不知道如何将此分支附加到原始self.tree

    def add_branch(self, extractedData):
        branch = {}
        u, n = extractedData

        for url, categoryName in zip(u, n):
            branch[categoryName] = [{}, url]

我似乎在这上面撞墙了。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以在Crawler.next_url方法中返回字典和网址:

return url, _path

这样,您的抓取逻辑就可以访问这两个对象,并可以更新_path字典。