如何使用美丽的汤find节点的孩子

我想获取<li>所有<a>标签

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

我知道如何find像这样的特定类的元素

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

但我不知道如何find<li class=test>所有孩子,而不是其他人

就像我想select

 <a> link1 </a> 

尝试这个

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

Theres在DOCs超级小部分,显示如何find/find直接的孩子。

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#the-recursive-argument

在你的情况下:

 soup.find("li", { "class" : "test" },recursive=False) soup.find_all("li", { "class" : "test" },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方法获取所有后代元素并存储在列表中。

也许你想要做

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

另一种方法 – 创build一个filter函数,为所有需要的标签返回True

 def my_filter(tag): return (tag.name == 'a' and tag.parent.name == 'li' and 'test' in tag.parent['class']) 

然后用参数调用find_all

 for a in soup(my_filter): # or soup.find_all(my_filter) print a