BeautifulSoup:如何从叶节点到根节点优先获取“最深”元素?
我正在做一个研究项目,想从Python文档中提取所有的“文档单元”。在Python文档中,文档单元可以是以下几种(用HTML标签表示):
- 一个方法(dl类:method)
- 一个类(dl类:class)
- 一个章节(div类:section)
这些文档单元是有层次关系的:一个章节里包含多个类,而每个类又包含多个方法。不过实际上,这种结构并不规则。
例子1:如果一个章节里有多个类和方法,我想单独提取每个方法,以及每个类(不包括方法,因为我已经提取过了),还有章节(不包括类和方法,但要保留章节里的其他内容,因为里面还有很多额外的信息)。
例子2:如果某个方法或类没有出现在任何章节中,我也想把它们提取出来,不能忘记它们。
注意:这并不简单,但我希望能把所有提取的内容放在一个列表里,顺序要和原文档中的顺序一致。
我尝试用BeautifulSoup来实现,但我觉得为了达到这个目的,我需要从“叶子到根”的方式搜索,先提取最深层的元素——而据我所知,BeautifulSoup4并不支持这种方式。
我最开始以为问题在于避免重复,但实际上这并不是主要问题。
我很感激你们的建议。
相关问题:
1 个回答
1
看起来这是不可能的。
所以我解决这个问题的方法是不断地遍历这些元素(我之前用.descendants获取的),然后用一个占位符替换掉那些嵌套的元素,这样就能看到变化了(使用replace_with)。
因为我之前用了.descendants,所以那些嵌套的元素其实已经被存储下来了。