如何获取BeautifulGroup中所有父标记的列表?

2024-05-14 06:29:29 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这样一个结构:

<folder name="folder1">
     <folder name="folder2">
          <bookmark href="link.html">
     </folder>
</folder>

如果我指向bookmark,那么要提取所有文件夹行的命令是什么? 例如

bookmarks = soup.findAll('bookmark')

然后beautifulsoupcommand(bookmarks[0])将返回:

[<folder name="folder1">,<folder name="folder2">]

我也想知道什么时候结束标记也击中。有什么想法吗?

提前谢谢!


Tags: name命令文件夹htmllinkfolder结构指向
2条回答

bookmarks[0].findParents('folder')将返回所有父节点的列表。然后可以遍历它们并使用它们的name属性。

这是我的尝试:

>>> from BeautifulSoup import BeautifulSoup
>>> html = """<folder name="folder1">
     <folder name="folder2">
          <bookmark href="link.html">
     </folder>
</folder>
"""
>>> soup = BeautifulSoup(html)
>>> bookmarks = soup.findAll('bookmark')
>>> [p.get('name') for p in bookmarks[0].findAllPrevious(name = 'folder')]
[u'folder2', u'folder1']

与@eumiro的答案不同的是,我使用的是findAllPrevious,而不是findParents。当我测试@eumiro的解决方案时,我发现findParents只返回第一个(直接)父级,因为父级和祖级的名称是相同的。

>>> [p.get('name') for p in bookmarks[0].findParents('folder')]
[u'folder2']

>>> [p.get('name') for p in bookmarks[0].findParents()]
[u'folder2', None]

如果父母和祖父母的名字不同,它确实会让两代人的父母回归。

>>> html = """<folder name="folder1">
     <folder_parent name="folder2">
          <bookmark href="link.html">
     </folder_parent>
</folder>
"""
>>> soup = BeautifulSoup(html)
>>> bookmarks = soup.findAll('bookmark')
>>> [p.get('name') for p in bookmarks[0].findParents()]
[u'folder2', u'folder1', None]

相关问题 更多 >