如何使用BeautifulSoup获取<body>标签的直接子元素而非后代元素?
获取的直接子元素(排除孙元素)
嘿,我明白你遇到的问题了——closest()方法确实不是干这个的,它是用来向上查找最近的匹配祖先元素的,和你要找直接子元素的需求完全反了方向,而且它也不会帮你筛选层级,所以才会带出所有子元素。
要精准获取<body>的直接子元素(也就是仅一级子节点,不包含孙节点及更深层级的元素),有两种非常直接的方法:
方法1:使用children属性
Element.children会返回当前元素的所有直接子元素节点(注意:只包含元素节点,不包括文本节点、注释节点这类非元素节点),完全符合你的需求。
示例代码:
// 获取<body>的所有直接子元素 const bodyDirectChildren = document.body.children; // 如果需要转为数组方便后续操作(比如筛选) const bodyDirectChildrenArray = Array.from(document.body.children); // 筛选出你需要的<p class="title">和<p class="story"> const targetElements = bodyDirectChildrenArray.filter(el => { return el.classList.contains('title') || el.classList.contains('story'); });
方法2:使用CSS子选择器 + querySelectorAll
CSS的>选择器专门用来匹配直接子元素,结合querySelectorAll可以直接选中目标元素,写法更简洁。
示例代码:
// 直接获取<body>下的所有直接子元素 const bodyDirectChildren = document.querySelectorAll('body > *'); // 精准选中<body>下的直接子元素中class为title或story的p标签 const targetElements = document.querySelectorAll('body > p.title, body > p.story');
这两种方法都能完美帮你拿到<body>的直接子元素,不会包含任何孙元素。如果你的目标就是那两个特定的p标签,方法2的精准选择写法会更高效哦!
内容的提问来源于stack exchange,提问作者fajara kurniawan
相关产品推荐
相关产品推荐

