xpath在定位元素时,有些类没有对应的元素,导致最后生成的列表也没有对应的位置,最后的列表就与其它列表长度不统一,这种情况该怎么办?

问题遇到的现象和发生背景

img


如图,我想获取景区等级,但是标红处没有对应的信息。

问题相关代码,请勿粘贴截图

level= htt.xpath('//span[@class="m_productcard_content_poitext"]/text()')

运行结果及报错内容

['5A', '4A', '4A', '4A', '4A', '4A', '4A']

我想要达到的结果

没有景区等级的位置由null或者其他字符替代。

先获取所有父元素,再获取父元素中子元素
判断父元素中是否有子元素即可
参考

from lxml import etree

html = '''
<ul>
    <li class="xxx">aaaaaaaaaa <span class="m_productcard_content_poitext">5A</span></li>
    <li class="xxx">aaaaaaaaaa </li>
    <li class="xxx">aaaaaaaaaa <span class="m_productcard_content_poitext">4A</span></li>
    <li class="xxx">aaaaaaaaaa </li>
    <li class="xxx">aaaaaaaaaa <span class="m_productcard_content_poitext">4A</span></li>
</ul>
'''
htt=etree.HTML(html)

level = []
li = htt.xpath('//li[@class="xxx"]')
for v in li:
    d = v.xpath('./span[@class="m_productcard_content_poitext"]/text()')
    if len(d)>0:
        level.append(d[0])
    else:
        level.append("无")

print(level)


如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

那就先用if判断一下,上一级标签下边是否存在这个标签。如果存在就获取到该数据保存在列表中,如果不存在就自己设定一个默认值,比如字符串"无"来占列表中的这个位置。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632