如何使用BeautifulSoup查找节点的子节点

185 投票
7 回答
344961 浏览
提问于 2025-04-16 19:13

我想要获取所有作为子元素的 <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)

撰写回答