2016-09-14 29 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' 

が、私はBeautifulSouprobobrowserを使用して、私は

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

をしようとすると、それはCSSセレクタが間違っていると言います。

+0

あなたの正確なエラーは何? –

+0

スペースで試してみることができますか? 'div.cl1> .cl2' –

+0

'div'と' text_2'は 'cl1'の子です。 – Jan

答えて

1

、あなただけのクラスから空間に必要div.cl1>div.cl2div.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>] 
関連する問題