所以,我正在构建一个小工具来自动从任何文章样式的页面中获取文本。我如何最好地解决问题的想法是找到超过约150个文本字符的所有元素:
document.xpath("//*[string-length( text() ) > 150 ]")
然后我得到一个元素列表,我想确定哪些元素是兄弟,但如果可能的话,我想避免为了效率而进行更多的DOM遍历。
在lxml中有一些很好的方法吗?
答案 0 :(得分:3)
给定一些节点列表l
,您可以检查任何元素对的父元素是否相同(使用.getparent()
获取父元素的位置):
def get_siblings(l):
for a in l:
for b in l:
if a < b: # this tests the elements' memory addresses,
# so we don't get duplicate pairs or test
# elements against themselves
if a.getparent() == b.getparent():
yield (a, b)
或者更简单:
def get_siblings(l):
return ((a, b) for a in l
for b in l
if a < b
and a.getparent() == b.getparent())
您还可以使用计数器查找具有多个兄弟的父母,然后找到包含这些父母的元素:
from collections import Counter
def get_siblings(l):
c = Counter([x.getparent() for x in l])
return [x for x in l if c[x.getparent()] > 1]