使用BeautifulSoup移除span标签内内容 提取死亡时间纯文本
方案1:直接定位span后取相邻文本节点
无需修改DOM结构,逻辑最简洁:
whole_section = soup.find('div', {'class':"token"}) # 访问整个区块 name_person = whole_section.h2.text # 选取h2标签中的人员姓名 # 匹配内容包含「Time of Death」的span标签,模糊匹配兼容前后多余空格 time_span = whole_section.find('span', string=lambda s: s and 'Time of Death' in s.strip()) # 取span后的第一个同级文本节点,strip去除前后空白符 time_decease = time_span.next_sibling.strip()
方案2:删除span标签后提取文本
适合需要同时移除该span方便后续其他操作的场景:
whole_section = soup.find('div', {'class':"token"}) # 访问整个区块 name_person = whole_section.h2.text # 选取h2标签中的人员姓名 # 定位到最后一个p标签(即死亡时间所在标签) time_p = whole_section.find_all('p')[-1] # 直接删除p标签内的span子节点,彻底排除span内容 time_p.span.decompose() # 提取剩余纯文本 time_decease = time_p.text.strip()
注意事项
- 不推荐用连续
next_sibling的定位方式,HTML结构稍有变动就会定位失效,用标签内容/属性匹配的兼容性更好 - 之前使用
span.clear()无效的原因是:clear()只会清空span内部的文本,不会移除span标签本身,提取父级p标签文本时依然会包含span内的内容,用decompose()直接删除整个span节点才能解决问题。
内容的提问来源于stack exchange,提问作者goodname
相关产品推荐
相关产品推荐

