下面的python2.7函数使用etree和xpath遍历DOM,并构建DOM的扁平列表表示。在每个节点上,它检查当前元素是否有一个应该忽略的类—如果是,它将跳过元素及其子元素。你知道吗
import re
from lxml import etree
ignore_classes = ['ignore']
def flatten_tree(element):
children = element.findall('*')
elements = []
if len(children) > 0:
for child in children:
if child.attrib.get('class') in ignore_classes:
continue
else:
for el in get_children(child):
elements.append(el)
elements.insert(0, element)
return elements
我该如何改进?必须有一种更优雅、更高效的方法。如果我在写一个嵌套的for
循环,我肯定是做错了什么。你知道吗
本文件:
<html>
<body>
<header class="ignore">
<h1>Gerbils</h1>
</header>
<main>
<p>They like almonds. That's pretty much all I know.</p>
</main>
</body>
</html>
会变成这样:
[ <html>,
<body>,
<main>,
<p> ]
提前谢谢!你知道吗
你可以用doImplementation.createDocument文件带参数。你知道吗
可以使用XPath,例如
XPath
descendant-or-self::*[not(ancestor-or-self::*[@class="ignore"])]
表示要处理要忽略的类名列表,可以使用一些代码构建XPath。 例如,如果
ignore_classes = ['A', 'B']
,那么您可以定义所以
xpath
等于尽管这看起来很冗长,但使用lxml的XPath引擎应该非常重要 比用Python遍历树更快。你知道吗
收益率
相关问题 更多 >
编程相关推荐