如何用BeautifulSoup拆分<h1>标签中的文本为独立数据项?
解决BeautifulSoup提取h1内多部分文本的问题
问题说明
你用soup.find("h1 span")得到None,是因为BeautifulSoup的find()方法不支持直接传入"h1 span"这类CSS层级选择器字符串,得换方式定位子标签。
分步实现代码
先获取h1标签:
h1_tag = soup.find("h1")
- 提取
Coriander:
h1标签的子节点包含纯文本节点和span标签,通过contents获取子节点列表,取第一个文本节点并清理空白:
main_name = h1_tag.contents[0].strip() print(main_name) # 输出: Coriander
- 正确获取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
相关产品推荐
相关产品推荐

