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

如何使用BeautifulSoup提取HTML中ITEM 1A至ITEM 1B间的内容?

提取指定ITEM之间的HTML内容

看起来你已经找到了目标文本所在的元素,但只拿到了单个元素,没把中间的内容都捞出来。别着急,我们可以通过定位起始和结束的容器div,然后遍历中间的所有元素来解决这个问题。

步骤1:定位起始和结束的div元素

首先,我们要找到包含ITEM 1A. RISK FACTORS和ITEM 1B. UNRESOLVED STAFF COMMENTS的最外层div(因为这两段文本都嵌套在div里的font标签中):

from bs4 import BeautifulSoup

# 初始化soup对象
page_soup = BeautifulSoup(page_html, "html.parser")

# 定位起始div:通过文本匹配找到包含目标内容的div
start_div = page_soup.find('div', text=lambda t: t and "ITEM 1A. RISK FACTORS" in t)

# 定位结束div
end_div = page_soup.find('div', text=lambda t: t and "ITEM 1B. UNRESOLVED STAFF COMMENTS" in t)

这里用lambda t: t and "目标文本" in t是为了避免处理None类型的文本节点,确保匹配准确。

步骤2:遍历并收集中间所有内容

找到起始和结束div后,我们从起始div开始,依次遍历它的后续兄弟元素,直到遇到结束div为止,把所有元素都收集起来:

# 用来存储提取的HTML内容
extracted_html = []

# 先把起始div加入列表
extracted_html.append(str(start_div))

# 从起始div的下一个兄弟元素开始遍历
current_element = start_div.next_sibling

while current_element is not None:
    # 如果遇到结束div,加入列表后停止循环
    if current_element == end_div:
        extracted_html.append(str(current_element))
        break
    
    # 只处理HTML标签元素,跳过换行、空格这类纯文本节点
    if hasattr(current_element, 'name'):
        extracted_html.append(str(current_element))
    
    # 移动到下一个兄弟元素
    current_element = current_element.next_sibling

# 把所有内容拼接成完整的HTML片段
final_result = '\n'.join(extracted_html)
print(final_result)

为什么你的原代码没生效?

你的原代码只遍历了所有font标签,找到包含目标文本的那个后就打印了它,但没有继续收集后面的内容。现在的方法是基于div容器来定位,然后遍历后续所有兄弟元素,这样就能把两个ITEM之间的所有HTML内容都提取出来。

额外注意事项

  • 如果起始和结束元素之间有嵌套的结构,这个方法依然有效,因为我们是直接遍历兄弟节点。
  • 如果文本匹配不够准确,也可以先找到包含目标文本的font元素,再通过find_parent('div')拿到外层的div容器,效果是一样的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:14:57