如何找到具有特定父级的元素?

Posted

技术标签:

【中文标题】如何找到具有特定父级的元素?【英文标题】:How to find element with specific parent? 【发布时间】:2017-01-22 19:44:45 【问题描述】:

我有一些 html,例如:

<div class='cl1'>
    <div class='cl2'>text_1</div>
    <div class='cl3'>
        <div class='cl2'>text_2</div>
    </div>
</div>

我需要找到任何以 cl1 为父项的 cl2 类项目,因此我需要获取 text_1 而不是 text_2。在简单的 css 中应该是这样的:

'div.cl1>div.cl2'

但我使用 robobrowserBeautifulSoup,当我尝试时

soup.select('div.cl1>div.cl2')

它说 css 选择器是错误的。

【问题讨论】:

您的具体错误是什么? 你能用空格试试吗,也许是这样的? 'div.cl1 > .cl2' divtext_2 也是 cl1 的子... @Jan,不是孩子,是后代。 ***.com/questions/1182189/… 【参考方案1】:

你的选择器在正确的轨道上,你只需要隔开类,即div.cl1&gt;div.cl2应该是div.cl1 &gt; div.cl2

In [5]: from bs4 import BeautifulSoup

In [6]: html = """<div class='cl1'>
    <div class='cl2'>text_1</div>
    <div class='cl3'>
        <div class='cl2'>text_2</div>
    </div>
</div>"""

In [7]: soup = BeautifulSoup(html, "html.parser")

In [8]: soup.select_one("div.cl1 > div.cl2") # good 
Out[8]: <div class="cl2">text_1</div>
In [9]: print(soup.select_one("div.cl1>div.cl2")) # bad
None

【讨论】:

【参考方案2】:

一种可能的解决方案是:

from bs4 import BeautifulSoup
data = """
<div class='cl1'>
    <div class='cl2'>text_1</div>
    <div class='cl3'>
        <div class='cl2'>text_2</div>
    </div>
</div>
"""
soup = BeautifulSoup(data)
divs = [div
        for div in soup.find_all("div", 'class': 'cl2')
        if 'cl1' in div.parent["class"]]

# [<div class="cl2">text_1</div>]

【讨论】:

以上是关于如何找到具有特定父级的元素?的主要内容,如果未能解决你的问题,请参考以下文章

具有固定父级的绝对定位元素上的 z-index [重复]

jquery如何获得父级的父级元素?

如何选择具有特定类的最后一个元素,而不是父级中的最后一个子元素?

jQuery hide()所有具有特定类的元素,除了具有特定父元素的所有元素

css如何让子元素不受父级的父级的overflow:hidden影响

具有绝对父级的 div 的 jQuery 动画宽度