如何使用BeautifulSoup查找节点的子节点
我想要获取所有作为子元素的 <a>
标签,这些标签是 <li>
的孩子:
<div>
<li class="test">
<a>link1</a>
<ul>
<li>
<a>link2</a>
</li>
</ul>
</li>
</div>
我知道怎么找到某个特定类的元素,比如这样:
soup.find("li", { "class" : "test" })
但是我不知道怎么找到所有属于 <li class=test>
的 <a>
标签,而不包括其他的。
比如我想选择:
<a>link1</a>
7 个回答
23
也许你想这样做
soup.find("li", { "class" : "test" }).find('a')
150
文档里有一个非常小的部分,介绍了如何找到/获取所有直接子元素。
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)
216
试试这个
li = soup.find('li', {'class': 'test'})
children = li.findChildren("a" , recursive=False)
for child in children:
print(child)