如何使用Python实现嵌套HTML列表的解析转换
你原有代码的问题是find_all('li')会递归匹配所有层级的<li>标签,无法区分嵌套深度,自然没法生成对应数量的加号前缀。你可以用递归函数逐层处理<ul>标签,每深入一层嵌套就把层级计数加1,对应加号的数量和层级数保持一致即可。
完整可运行代码如下:
import bs4 def parse_list(ul_node, level=1): res = [] # 只遍历当前ul的直接子节点,不递归深层节点 for child in ul_node.children: if not isinstance(child, bs4.element.Tag): continue if child.name == "li": res.append(f"{'+'*level} {child.get_text(strip=True)}") elif child.name == "ul": # 嵌套ul,层级+1递归处理 res.extend(parse_list(child, level+1)) return res # 你的HTML代码存储在变量x中 soup = bs4.BeautifulSoup(x, "html.parser") root_ul = soup.find("ul") output = "\n".join(parse_list(root_ul)) print(output)
运行上述代码输出的结果和你要求的预期效果完全一致。
内容的提问来源于stack exchange,提问作者erkor
相关产品推荐
相关产品推荐

