首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Beautiful soup查找没有兄弟姐妹的P标签

如何使用Beautiful soup查找没有兄弟姐妹的P标签
EN

Stack Overflow用户
提问于 2019-01-28 16:09:27
回答 4查看 226关注 0票数 2

一些<p></p>标签有<img>标签和<h4>标签,但我只想要那些<p>标签,其中没有兄弟标签在它只是内容。

代码语言:javascript
运行
复制
 <p> <img src="any url"/> </p>     <p> hello world </p>

我想要没有使用漂亮汤的<img>标签的<p>标签

EN

回答 4

Stack Overflow用户

发布于 2019-01-28 16:48:20

这将获得<p>元素中的所有文本,但不会从<p>中的任何子元素中获得这些文本。Recursive需要等于false,否则它将查找子元素。我添加了另一个测试用例来展示这一点:<p><h4>Heading</h4></p>

代码语言:javascript
运行
复制
from bs4 import BeautifulSoup

html = "<p> <img src='any url'/> </p>   <p><h4>Heading</h4></p>  <p> hello world </p>"

soup = BeautifulSoup(html)

for element in soup.findAll('p'):
    print("".join(element.findAll(text=True, recursive=False)))
票数 0
EN

Stack Overflow用户

发布于 2019-01-30 03:50:40

一种解决方案,可以获取所有没有子标签的p标签。

代码语言:javascript
运行
复制
import bs4
html="""<p> <img src="any url"/> </p>     <p> hello world </p>"""
soup=bs4.BeautifulSoup(html,"html.parser")

def has_no_tag_children(tag):
    if  type(tag) is bs4.element.Tag: #check if tag
        if tag.name =='p': #check if it is p tag
            if  bs4.element.Tag not in [type(child) for child in tag.children]: # check if has any tag children
                return True
    return False

kids=soup.find_all(has_no_tag_children)
print(kids)

输出

代码语言:javascript
运行
复制
[<p> hello world </p>]
票数 0
EN

Stack Overflow用户

发布于 2019-01-30 04:12:23

假设使用BeautifulSoup 4.7+,您应该能够这样做:

代码语言:javascript
运行
复制
import bs4
html="""<p> <img src="any url"/> </p>     <p> hello world </p>"""
soup=bs4.BeautifulSoup(html,"html.parser")

kids=soup.select("p:not(:has(*))")
print(kids)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54397779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档