首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python 1.0 :元素属性的唯一值

python 1.0 :元素属性的唯一值
EN

Stack Overflow用户
提问于 2018-10-16 13:41:07
回答 1查看 390关注 0票数 1

Here是获取唯一值的一种方法。如果我想得到唯一的属性,它就无效了。例如:

代码语言:javascript
复制
<a href = '11111'>sometext</a>
<a href = '11121'>sometext2</a>
<a href = '11111'>sometext3</a>

我想要一个独特的裁判。受XPath1.0限制

代码语言:javascript
复制
page_src.xpath( '(//a[not(.=preceding::a)] )')
page_src.xpath( '//a/@href[not(.=preceding::a/@href)]' )

还复本。有可能在unique-values缺勤的情况下解决这个噩梦吗?

UPD :它不是我想要的函数那样的解决方案,但我编写了python函数,它遍历父元素并检查是否将父标记筛选器链接添加到所需的计数。

以下是我的例子:

代码语言:javascript
复制
_x_item = (
    '//a[starts-with(@href, "%s")'
    'and (not(@href="%s"))'
    'and (not (starts-with(@href, "%s"))) ]'
    %(param1, param1, param2 ))

#rm double links
neededLinks = list(map(lambda vasa: vasa.get('href'), page_src.xpath(_x_item)))
if len(neededLinks)!=len(list(set(neededLinks))):
    uniqLength = len(list(set(neededLinks)))
    breakFlag = False
    for linkk in neededLinks:
        if neededLinks.count(linkk)>1:
            dupLinks = page_src.xpath('//a[@href="%s"]'%(linkk))
            dupLinkParents = list(map(lambda vasa: vasa.getparent(), dupLinks))
            for dupParent in dupLinkParents:
                tempLinks = page_src.xpath(_x_item.replace('//','//%s/'%(dupParent.tag)))
                tempLinks = list(map(lambda vasa: vasa.get('href'), tempLinks))
                if len(tempLinks)==len(set(neededLinks)):
                    breakFlag = True
                    _x_item = _x_item.replace('//','//%s/'%(dupParent.tag))
                    break
            if breakFlag:
                break

如果重复链接具有不同的父链接,但具有相同的@href值,则此操作将有效。

因此,我将添加parent.tag前缀,如//div/my_prev_x_item

另外,使用python,我可以将结果更新为//div[@key1="val1" and @key2="val2"]/my_prev_x_item,在dupParent.items()上迭代。但是,只有当项不在同一个父对象中时才能工作。

因此,我只需要x_path_expression,,所以我不能只使用list(set(myItems))

如果存在,我想要更简单的解决方案(比如unique-values() )。此外,如果链接的父级相同,则我的解决方案不起作用。

EN

回答 1

Stack Overflow用户

发布于 2018-10-19 09:34:45

你可以提取所有的萤火虫,然后找出唯一的:

代码语言:javascript
复制
all_hrefs = page_src.xpath('//a/@href')
unique_hrefs = list(set(all_hrefs))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52836869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档