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

5 Solutions collect form web for “如何使用美丽的汤find节点的孩子”

尝试这个

 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 
  • 后台线程与QThread在PyQt
  • 布尔运算符与按位运算符
  • UnicodeDecodeError:'ascii'编解码器无法解码位置0中的字节0xe0:序号不在范围内(128)
  • 在Python中parsing.properties文件
  • 有趣的“只有1个参数(2给出)”Python错误
  • Python的json模块,将int字典键转换为string
  • 分发,distutils,setuptools和distutils2之间的区别?
  • Numpy 1热arrays
  • 点是不能正确安装包:权限被拒绝错误
  • 有专门针对PyQt5的教程吗?
  • TensorFlow中tf.app.flags的用途是什么?