2016-09-14 50 views
2

我有一些HTML这样的:如何查找具有特定父级的元素?

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

我需要找到一个有CL1父CL2类的任何物品,所以我需要得到文本1但不_2。在简单的CSS应该是这样的:

'div.cl1>div.cl2' 

但我用robobrowserBeautifulSoup,当我尝试

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

它说,CSS选择是错误的。

+0

你是什么确切的错误? –

+0

你可以用空格来试试它吗? 'div.cl1> .cl2' –

+0

带有'text_2'的'div'也是'cl1'的孩子...... – Jan

回答

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 
0

一个可能的解决办法是:

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>] 
相关问题