确定两个html元素是否是兄弟姐妹

时间:2015-07-01 20:46:29

标签: python html lxml

所以,我正在构建一个小工具来自动从任何文章样式的页面中获取文本。我如何最好地解决问题的想法是找到超过约150个文本字符的所有元素:

document.xpath("//*[string-length( text() ) > 150 ]")

然后我得到一个元素列表,我想确定哪些元素是兄弟,但如果可能的话,我想避免为了效率而进行更多的DOM遍历。

在lxml中有一些很好的方法吗?

1 个答案:

答案 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]
相关问题