2017-12-31 218 views
1

BeautifulSoup(bs4)を使用しているすべての子供を(再帰的に)検索する方法はありますか?BeautifulSoupタグのすべての直接の子供を取得するには?

block1 : <span>A</span> 
block2 : <span><span>B</span></span> 
block3 : <span>C</span> 

私はこの方法をやっている:

for j in soup.find_all(True)[:1]: 
      if isinstance(j, NavigableString): 
       continue 
      if isinstance(j, Tag): 
       tags.append(j.name) 
       # Get siblings 
       for k in j.find_next_siblings(): 
        # k is sibling of first element 

はそれを行うためのクリーンな方法はありますか?私はこのようなブロックを取得したい

<div class='body'><span>A</span><span><span>B</span></span><span>C</span></div>

答えて

1

直接子孫のみを選択する場合は、recursive引数をFalseに設定できます。
あなたが提供するHTMLでの例:私はドキュメントから、それが動作することを逃した

from bs4 import BeautifulSoup 

html = "<div class='body'><span>A</span><span><span>B</span></span><span>C</span></div>" 
soup = BeautifulSoup(html, "lxml") 
for j in soup.div.find_all(recursive=False): 
    print(j) 

<span>A</span> 
<span><span>B</span></span> 
<span>C</span> 
+0

ありがとう! – dbrrt

+0

ようこそ@dbrrt、そして幸せな新年! –

+0

2018年の願い事! – dbrrt

関連する問題