【问题标题】:How do I get a list of all parent tags in BeautifulSoup?如何获取 BeautifulSoup 中所有父标签的列表?
【发布时间】:2011-04-14 17:14:36
【问题描述】:

假设我有这样的结构:

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

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

bookmarks = soup.findAll('bookmark')

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

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

我也想知道结束标签什么时候出现。有什么想法吗?

提前致谢!

【问题讨论】:

    标签: python html-parsing beautifulsoup xml-parsing


    【解决方案1】:

    这是我的尝试:

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

    与@eumiro 答案的主要区别在于我使用的是find_all_previous 而不是find_parents。当我测试@eumiro 的解决方案时,我发现find_parents 只返回第一个(直接)父母,因为父母和祖父母的名字是相同的。

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • BS 只返回第一个(直接)父母,因为父母和祖父母的名字相同。如果父母和祖父母的名字不同,它确实会返回两代父母。
      猜你喜欢
      • 2019-10-30
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-09
      • 2021-05-13
      相关资源
      最近更新 更多