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

如何提取HTML中指定class的最内层空div之间的文本内容?

提取指定start与end之间的文本内容

核心思路

先定位到第二个带start类的空div,接着遍历它的后续兄弟节点,直到遇到第一个带end类的div为止,收集过程中所有节点的文本内容。

代码实现(以Python的BeautifulSoup为例)

from bs4 import BeautifulSoup

# 假设你的HTML内容存在html变量中
html = """
many <divs> </divs> and other tags

<div class ="start"> </div>
<div> bla bla bla </div>

<div class ="start"> </div>
<div> <i> <a> <span> <p> Text I want </p></span></a></i> </div>
<div> <p> Text I want </p> <p> Text I want </p> </div>
<div class ="end"></div>

<div> bla bla bla </div>
<div class ="end"></div>

many <divs> </divs> and other tags
"""

soup = BeautifulSoup(html, 'html.parser')

# 找到所有带start类的div,取第二个(索引为1,因为列表从0开始)
start_divs = soup.find_all('div', class_='start')
target_start = start_divs[1]

# 遍历后续兄弟节点,收集文本
result_text = []
for sibling in target_start.next_siblings:
    # 过滤掉换行等非标签节点
    if not hasattr(sibling, 'attrs'):
        continue
    # 遇到第一个end类div就停止
    if 'end' in sibling.attrs.get('class', []):
        break
    # 提取当前节点下的所有文本(包括子标签里的)
    result_text.append(sibling.get_text(strip=True))

# 合并结果,过滤空内容
final_text = '\n'.join([t for t in result_text if t])
print(final_text)

代码说明

  • find_all('div', class_='start'):一次性获取所有带start类的div,直接取第二个就能定位目标起始点。
  • next_siblings:遍历起始div的所有后续兄弟节点,这里要过滤掉换行符这类非标签节点(HTML里的换行会被解析成NavigableString,没有attrs属性)。
  • sibling.get_text(strip=True):提取当前节点下所有层级的文本,自动去掉首尾空格,避免空内容干扰。
  • 判断'end' in sibling.attrs.get('class', []):确保遇到第一个end类div时立即停止遍历,不会多取无关内容。

你之前方法失败的可能原因

  1. 没过滤next_siblings里的非标签节点,导致判断class时触发属性不存在的错误。
  2. 没设置终止条件,遍历了所有兄弟节点,拿到了不需要的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:55:21