首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态地找到所选元素的最近的特定父级?

如何动态地找到所选元素的最近的特定父级?
EN

Stack Overflow用户
提问于 2022-11-30 18:25:38
回答 1查看 32关注 0票数 2

我希望解析许多html页面,并使用beautifulsoup html.parser和python删除包含文本"Message“的div。div没有名称或id,因此指向它是不可能的。我可以为1 html页面这样做。在下面的代码中,您将看到6 .parent。这是因为在这个html页面中,div标记和文本"Message“之间有5个标记(p,i,b,span,a),第6个标记是div。下面的代码适用于1 html页面。

代码语言:javascript
复制
soup = BeautifulSoup(html_page,"html.parser")
scores = soup.find_all(text=re.compile('Message'))
divs = [score.parent.parent.parent.parent.parent.parent for score in scores]
divs.decompose()

问题是-- div和"Message“之间的标记数并不总是6,在某些html页面中,它是3,在大约7。

那么,是否有一种方法可以动态地在文本"Message“和最近的div之间找到标记(n)的数目,并使用n+1、beautifulsoup将.parent的数目添加到(在上面的代码中)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-30 18:47:05

正如在您的问题中所描述的,在这个问题之间没有其他<div>,您可以使用.find_parent()

代码语言:javascript
复制
soup.find(text=re.compile('Message')).find_parent('div').decompose()

请注意,如果使用find_all(),则必须在取消.find_parent()时迭代ResultSet

代码语言:javascript
复制
for r in soup.find_all(text=re.compile('Message')):
    r.find_parent('div').decompose()

就像在您的示例divs.decompose()中一样,您还应该迭代list

示例

代码语言:javascript
复制
from bs4 import BeautifulSoup
import re
html='''
<div>
    <span>
        <i>
            <x>Message</x>
        </i>
    </span>
</div>
'''
soup = BeautifulSoup(html)

soup.find(text=re.compile('Message')).find_parent('div')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74632532

复制
相关文章

相似问题

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