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

如何用BeautifulSoup拆分<h1>标签中的文本为独立数据项?

解决BeautifulSoup提取h1内多部分文本的问题

问题说明

你用soup.find("h1 span")得到None,是因为BeautifulSoup的find()方法不支持直接传入"h1 span"这类CSS层级选择器字符串,得换方式定位子标签。

分步实现代码

先获取h1标签:

h1_tag = soup.find("h1")
  1. 提取Coriander:
    h1标签的子节点包含纯文本节点和span标签,通过contents获取子节点列表,取第一个文本节点并清理空白:
main_name = h1_tag.contents[0].strip()
print(main_name)  # 输出: Coriander
  1. 正确获取span标签并拆分内容:
    有两种方式定位span标签:
# 方式1:从已找到的h1标签内找span
span_tag = h1_tag.find("span")
# 方式2:用CSS选择器直接定位(支持层级写法)
span_tag = soup.select_one("h1 span")

拆分span内的Herb / Cilantro:

span_text = span_tag.get_text(strip=True)
category, alias = [item.strip() for item in span_text.split("/")]
print(category)  # 输出: Herb
print(alias)     # 输出: Cilantro

完整可运行示例

from bs4 import BeautifulSoup

# 示例HTML结构
html = """<h1>Coriander<span>Herb / Cilantro</span></h1>"""
soup = BeautifulSoup(html, "html.parser")

h1_tag = soup.find("h1")
main_name = h1_tag.contents[0].strip()

span_tag = h1_tag.find("span")
category, alias = [item.strip() for item in span_tag.get_text(strip=True).split("/")]

print(main_name)
print(category)
print(alias)

运行后输出:

Coriander
Herb
Cilantro

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:40:35