假设我有这样的结构:
<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">]
我还想知道结束标签何时也命中。有什么想法吗?
提前致谢!
最佳答案
这是我的尝试:
>>> 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]
如果 parent 和祖 parent 的名字不同,它会返回两代 parent 。
>>> 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]
关于python - 如何获取 BeautifulSoup 中所有父标签的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3752327/