如何使用美丽的汤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