BeautifulSoup计数标签,无需在其内部深入解析

时间:2014-12-28 04:14:53

标签: python xml xml-parsing beautifulsoup

我考虑过以下while writing an answer to this question

假设我有一个深度嵌套的xml这样的文件(但更多的嵌套和更长的时间):

<section name="1">
    <subsection name"foo">
        <subsubsection name="bar">
            <deeper name="hey">
                <much_deeper name"yo">
                    <li>Some content</li>
                </much_deeper>
            </deeper>
        </subsubsection>
    </subsection>
</section>
<section name="2">
    ... and so forth
</section>

len(soup.find_all("section"))的问题在于,在执行find_all("section")时,BS会不断搜索我知道不会包含任何其他section标记的标记。

所以,有两个问题:

  1. 有没有办法让BS 以递归方式搜索已经找到的标签?
  2. 如果对1的回答是肯定的,它会更有效还是内部过程相同?

1 个答案:

答案 0 :(得分:3)

BeautifulSoup无法为您提供所发现的一个计数/数量。

但是,您可以改进的是:不要让BeautifulSoup通过传递recursive=False来搜索其他部分中的部分:

len(soup.find_all("section", recursive=False))

除了改进之外,lxml可以更快地完成工作:

tree.xpath('count(//section)')