lxml.etree.iterwalk()を使うと、深さ優先でHTMLのタグを巡回することができます。
1 2 3 4 5 6 7 | from lxml import etree for d in etree.iterwalk(etree.fromstring(html, parser=etree.HTMLParser()), events=("start", "end",)): if ( d[0] == "start" ): print "<%s>" % d[1].tag, elif ( d[0] == "end" ): print "</%s>" % d[1].tag, |
「events=("start", "end")」と指定することで、開始タグと終了タグを見つけるたびに以下のように個別に処理を行うことができます。その時のタグ名はlxmlのノード型ですので、「tag」メンバでアクセスできます。