You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup遍历ol标签所有子元素并保持顺序的方法

问题根因

HTML规范明确要求,<ol>有序列表的合法直接子元素仅支持<li>列表项、<script>、<template>这类标签,不允许直接嵌套<div>。你用的HTML解析器默认会对不符合规范的DOM做容错修正,自动把夹在两个<li>中间的<div>移出<ol>的子节点层级,挪到<ol>标签外面,所以遍历ol的子元素时拿不到这个div。

解决方法
  • 方案1(推荐):修正HTML结构
    把<div>放到对应的<li>标签内部,写出符合规范的HTML,从根源上避免解析器自动修改结构,也能保证所有浏览器、解析器的渲染结果一致。
    合法结构示例:

    <ol>
      <li>...</li>
      <li>
        <div>...</div>
      </li>
      <li>...</li>
    </ol>
    
  • 方案2:更换解析器保留原始结构
    如果你没法修改原始HTML,可以把解析器换成html5lib,这个解析器会最大程度保留原始HTML的节点位置,不会随便挪动不符合规范的节点。
    初始化代码示例(需要先执行pip install html5lib安装依赖):

    from bs4 import BeautifulSoup
    doc = BeautifulSoup(原始HTML字符串, 'html5lib')
    

    换完解析器后,原有遍历代码就能按顺序拿到<ol>下的所有子元素,包括中间的<div>。遍历时建议加节点判断,过滤掉代码缩进、换行生成的空白文本节点,避免输出无意义空内容:

    for e in doc.find('ol').children:
        if e.name:  # 跳过空白文本节点
            print(e.text)
    

内容的提问来源于stack exchange,提问作者Sven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:30:42