【问题标题】: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,不是孩子,是后代。 stackoverflow.com/questions/1182189/…

标签: python css-selectors beautifulsoup robobrowser


【解决方案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>]
    

    【讨论】:

      猜你喜欢
      • 2012-05-19
      • 2010-12-14
      • 2023-01-04
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多