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