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

标签 python html-parsing beautifulsoup xml-parsing

假设我有这样的结构:

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

相关文章:

python - "Expected string or buffer"使用 Beautiful Soup 时出错

python - 如何在beautifulsoup中有条件地从html中提取文本

Python 3 在划分两个大数时给出错误的输出?

python - 如何从股票推特下载数据?

python - 我的 Windows GTK+ for Python 安装有什么问题?

java - Jsoup Java HTML 解析器 : Executing Javascript events

python - 有没有办法找到类名并获取父标签的整个文本?

Python:如何向 re.sub() 的替换参数添加计数器

python - 我想在 RSS 提要描述标签中获取图像链接

c++ - (mingW) 为什么 g++ 在编译 python 扩展时不能识别我的类定义?