如何找到具有特定父级的元素?
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'
但我使用 robobrowser 和 BeautifulSoup,当我尝试时
soup.select('div.cl1>div.cl2')
它说 css 选择器是错误的。
【问题讨论】:
您的具体错误是什么? 你能用空格试试吗,也许是这样的? 'div.cl1 > .cl2'div
和 text_2
也是 cl1
的子...
@Jan,不是孩子,是后代。 ***.com/questions/1182189/…
【参考方案1】:
你的选择器在正确的轨道上,你只需要隔开类,即div.cl1>div.cl2
应该是div.cl1 > 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>]
【讨论】:
以上是关于如何找到具有特定父级的元素?的主要内容,如果未能解决你的问题,请参考以下文章
如何选择具有特定类的最后一个元素,而不是父级中的最后一个子元素?
jQuery hide()所有具有特定类的元素,除了具有特定父元素的所有元素