擅长:python、mysql、java
<p><code>recursiveChildGenerator()</code>已经做到了:</p>
<pre><code>soup = BeautifulSoup.BeautifulSoup(html)
for child in soup.recursiveChildGenerator():
name = getattr(child, "name", None)
if name is not None:
print name
elif not child.isspace(): # leaf node, don't print spaces
print child
</code></pre>
<h3>输出</h3>
<p>对于来自<a href="https://stackoverflow.com/questions/4814317/depth-first-traversal-on-beautifulsoup-parse-tree/4814582#4814582">@msalvadores's answer</a>的html:</p>
<pre><code>html
ul
li
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
li
Aliquam tincidunt mauris eu risus.
li
Vestibulum auctor dapibus neque.
html
</code></pre>
<p>注意:<code>html</code>由于<a href="https://stackoverflow.com/questions/4814317/depth-first-traversal-on-beautifulsoup-parse-tree/4814582#4814582">the example</a>包含<em>两个</em>打开的<code><html></code>标记而打印两次。</p>