ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 如何在BeautifulSoup中获取所有父标签的列表?

2019-07-22 00:56:51  阅读:507  来源: 互联网

标签:python xml-parsing html-parsing beautifulsoup


假设我有这样的结构:

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

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

bookmarks = soup.findAll('bookmark')

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

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

我也想知道结尾标签何时出现.有任何想法吗?

提前致谢!

解决方法:

以下是我的尝试:

>>> 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]

标签:python,xml-parsing,html-parsing,beautifulsoup
来源: https://codeday.me/bug/20190722/1497489.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有