BeautifulSoup:如何从叶节点到根节点优先获取“最深”元素?

0 投票
1 回答
1541 浏览
提问于 2025-04-18 03:35

我正在做一个研究项目,想从Python文档中提取所有的“文档单元”。在Python文档中,文档单元可以是以下几种(用HTML标签表示):

  • 一个方法(dl类:method)
  • 一个(dl类:class)
  • 一个章节(div类:section)

这些文档单元是有层次关系的:一个章节里包含多个,而每个又包含多个方法。不过实际上,这种结构并不规则。

例子1:如果一个章节里有多个类和方法,我想单独提取每个方法,以及每个类(不包括方法,因为我已经提取过了),还有章节(不包括类和方法,但要保留章节里的其他内容,因为里面还有很多额外的信息)。

例子2:如果某个方法或类没有出现在任何章节中,我也想把它们提取出来,不能忘记它们。

注意:这并不简单,但我希望能把所有提取的内容放在一个列表里,顺序要和原文档中的顺序一致。

我尝试用BeautifulSoup来实现,但我觉得为了达到这个目的,我需要从“叶子到根”的方式搜索,先提取最深层的元素——而据我所知,BeautifulSoup4并不支持这种方式。

我最开始以为问题在于避免重复,但实际上这并不是主要问题。

我很感激你们的建议。

相关问题:

1 个回答

1

看起来这是不可能的。

所以我解决这个问题的方法是不断地遍历这些元素(我之前用.descendants获取的),然后用一个占位符替换掉那些嵌套的元素,这样就能看到变化了(使用replace_with)。

因为我之前用了.descendants,所以那些嵌套的元素其实已经被存储下来了。

撰写回答