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

2024-06-09 02:40:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我想得到所有的<a>标记,它们是<li>的子代:

<div>
<li class="test">
    <a>link1</a>
    <ul> 
       <li>  
          <a>link2</a> 
       </li>
    </ul>
</li>
</div>

我知道如何找到具有如下特定类的元素:

soup.find("li", { "class" : "test" }) 

但我不知道如何找到所有的<a><li class=test>的孩子,而不是其他的孩子。

我想选择:

<a>link1</a>

Tags: 标记testdiv元素孩子lifindul
3条回答

试试这个

li = soup.find('li', {'class': 'text'})
children = li.findChildren("a" , recursive=False)
for child in children:
    print child

试试这个:

li = soup.find("li", { "class" : "test" })
children = li.find_all("a") # returns a list of all <a> children of li

其他提醒:

find方法只获取第一个出现的子元素。 find_all方法获取所有子代元素并存储在列表中。

文档中有一个超小的部分,说明如何查找/查找所有直接子项。

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)

相关问题 更多 >