如何使用BeautifulSoup提取不含子标签的单个标签
提取不包含子标签的单个
标签方法
要筛选出仅包含文本、没有嵌套其他标签的
标签,可以用以下两种方法实现:
方法一:利用回调函数判断子节点类型
通过find_all的回调函数,检查每个
标签的子节点是否全部为文本类型(NavigableString):
from bs4 import BeautifulSoup from bs4.element import NavigableString html = """ <p><a href='XYZ'>Text1</a></p> <p>Text2</p> <p><a href='QWERTY'>Text3</a></p> <p>Text4</p> """ soup = BeautifulSoup(html, 'html.parser') # 筛选符合条件的p标签 target_ps = soup.find_all(lambda tag: tag.name == 'p' and all(isinstance(child, NavigableString) for child in tag.children)) print(target_ps)
执行后输出:
[<p>Text2</p>, <p>Text4</p>]
方法二:使用CSS选择器(需BeautifulSoup 4.7.0+)
借助CSS伪类:not(:has(*))直接筛选不包含任何子元素的
标签:
from bs4 import BeautifulSoup html = """ <p><a href='XYZ'>Text1</a></p> <p>Text2</p> <p><a href='QWERTY'>Text3</a></p> <p>Text4</p> """ soup = BeautifulSoup(html, 'html.parser') # 通过CSS选择器定位目标标签 target_ps = soup.select('p:not(:has(*))') print(target_ps)
同样会得到你期望的结果。
内容的提问来源于stack exchange,提问作者jedrula
相关产品推荐
相关产品推荐

