如何用递归重构嵌套循环的Python分类树解析函数?
递归重构分类树解析代码方案
你可以把重复的节点处理逻辑抽成递归函数,彻底消除嵌套循环的冗余。核心思路是:每一层分类节点的处理逻辑完全一致——提取当前分类的标题和链接,然后递归处理它的子节点,把结果挂载到childs列表中。
重构后的代码
首先在类中添加一个递归辅助方法:
def _parse_category_node(self, node): # 提取当前节点的标题与链接 category_a = node.xpath("./a") title = category_a.xpath("./*[1]/text()").get() url = self._host + category_a.xpath("./@href").get() # 初始化当前分类对象 category = { "title": title, "url": url, "childs": [], } # 获取当前节点的所有子节点行,递归处理每个子节点 child_nodes = node.xpath("./div/div") for child_node in child_nodes: category["childs"].append(self._parse_category_node(child_node)) return category
然后主解析逻辑可以简化成:
for container in category_containers: yield self._parse_category_node(container)
重构优势
- 消除冗余代码:原代码中重复的节点提取、对象初始化逻辑被完全复用,不再需要多层嵌套循环
- 扩展性更强:不管分类树有多少层级(原代码写死了4层),递归都会自动处理,后续新增层级不需要修改代码
- 逻辑更清晰:每个函数只负责处理单个节点的逻辑,职责单一,更容易维护和调试
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

