首页 > 解决方案 > BeautifulSoup:查找多个嵌套元素的类值

问题描述

我正在尝试使用 BeautifulSoup (Python) 在多个嵌套元素中查找类值,如下所示:

<li class="Top Class Name" dataid="60">
  <a class="Name of Sub Class 1" href="www.abc.com" dataid="61">
    <div class="Class2" dataid="62">
        <div class="My Class3" dataid="63"><span dataid="64">This is correct</span></div>
          <div class="My Class4" dataid="65">
            <svg class="My Class5 Cur(p)" width="20" style="vertical-align:bottom;" height="26" viewBox="0 0 24 24" dataon="filled-circle"  dataid="67"><path d="The Path" dataid="66"></path>
            </svg>
          </div>
        </div>
    </div>
  </a>
</li>

使用soup.find_all("li", attrs={"class": "Top Class Name"})我能够找到顶级课程。现在我正在寻找的是找到元素的class名称。svg所以它应该返回:My Class5 Cur(p).

如何才能做到这一点?

谢谢你的帮助。

标签: pythonbeautifulsoupfind

解决方案


您可以使用 CSS 选择器.Top.Class.Name svg[class],然后获取属性class

注意,当class=属性中有空格时,标签有多个类。Soclass="Top Class Name"表示标签属于TopClassName。对于<svg class="My Class5 Cur(p)">.

txt = '''
<li class="Top Class Name" dataid="60">
  <a class="Name of Sub Class 1" href="www.abc.com" dataid="61">
    <div class="Class2" dataid="62">
        <div class="My Class3" dataid="63"><span dataid="64">This is correct</span></div>
          <div class="My Class4" dataid="65">
            <svg class="My Class5 Cur(p)" width="20" style="vertical-align:bottom;" height="26" viewBox="0 0 24 24" dataon="filled-circle"  dataid="67"><path d="The Path" dataid="66"></path>
            </svg>
          </div>
        </div>
    </div>
  </a>
</li>
'''

soup = BeautifulSoup(txt, 'html.parser')

svg = soup.select_one('.Top.Class.Name svg[class]')
print(svg['class'])

印刷:

['My', 'Class5', 'Cur(p)']

更多关于CSS 选择器的信息


推荐阅读