回答:
DOCには非常に小さなセクションがあり、直接の子を見つける/見つける方法を示しています。
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#the-recursive-argument
あなたの場合、最初の直接の子であるlink1が必要です:
# for only first direct child
soup.find("li", { "class" : "test" }).find("a", recursive=False)
すべての直接の子が必要な場合:
# for all direct children
soup.find("li", { "class" : "test" }).findAll("a", recursive=False)
これを試して:
li = soup.find("li", { "class" : "test" })
children = li.find_all("a") # returns a list of all <a> children of li
その他のリマインダー:
findメソッドは、最初に出現する子要素のみを取得します。find_allメソッドはすべての子孫要素を取得し、リストに格納されます。
「他のa
子では<li class=test>
なく子であるすべてを見つける方法は?」
以下のHTMLを考えると(私は別の追加<a>
の間TEの違いを示すためにselect
とのselect_one
):
<div>
<li class="test">
<a>link1</a>
<ul>
<li>
<a>link2</a>
</li>
</ul>
<a>link3</a>
</li>
</div>
解決策は、2つのCSSセレクターの間に配置された子コンビネーター(>
)を使用することです。
>>> soup.select('li.test > a')
[<a>link1</a>, <a>link3</a>]
最初の子だけを見つけたい場合:
>>> soup.select_one('li.test > a')
<a>link1</a>
soup.find('li', {'class': 'text'}).findChildren()
。