2016-09-14 93 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>] 
相關問題