如何使用Beautiful Soup获取父元素文本并排除子元素内容?
解决方法:提取元素中排除后的文本
针对你给出的HTML结构和需求,这里提供几种实用的修改方案:
方法1:移除标签后获取文本
这种方法先彻底移除
for item in soup2.findAll('div', {'class':'box-body light-b'}): sub_items = item.findAll('li') for sub_item in sub_items: # 查找并移除<li>中的<b>标签 b_tag = sub_item.find('b') if b_tag: b_tag.decompose() # 获取处理后的文本,strip()去除首尾多余空格 print(sub_item.get_text(strip=True))
方法2:直接获取标签的后续文本
如果HTML结构固定(后直接是目标文本),可以直接取的兄弟节点内容,效率更高:
for item in soup2.findAll('div', {'class':'box-body light-b'}): sub_items = item.findAll('li') for sub_item in sub_items: b_tag = sub_item.find('b') if b_tag: # 提取<b>之后的文本并去除空格 target_text = b_tag.next_sibling.strip() print(target_text)
方法3:筛选非标签的文本节点
如果
for item in soup2.findAll('div', {'class':'box-body light-b'}): sub_items = item.findAll('li') for sub_item in sub_items: # 遍历所有子节点,收集非<b>标签的文本 target_text = ''.join( [node.strip() for node in sub_item.contents if not hasattr(node, 'name') or node.name != 'b'] ).strip() print(target_text)
以上三种方法都能输出你需要的James,可以根据实际HTML结构选择最合适的方案。
内容的提问来源于stack exchange,提问作者user20866372
相关产品推荐
相关产品推荐

