随着vue的广泛应用传统的xpath语法已经满足不了日常的html解析工作了,这里总结几种常用xpath高级用法附加说明,亲测可以解决90%+的html解析问题,话不多说进入正题,文末有彩蛋
1.或 语法
'//div[@id="testid"]/h2/text() | //li[@data]/text()'
2.条件判断
u'//h2[text()="文本"]/text()'
3.节点统计
'count(//li[@data])'
4.多条件匹配
'//li[@data="one" or @code="one"]/text()'
5.布尔值(否)
'count(//li[not(@data)])'不包含data属性的li标签统计`
6.html源码还原
s = <Element div at 0x2b6ffc8>
s2 = etree.tostring(s)
7.选取一个属性中的多个值
举例:<div class="mp-city-list-container mp-privince-city" mp-role="provinceCityList">
选择这个div的方案网上有说用and的,但是似乎只能针对不同的属性的单个值
本次使用contains
.xpath('div[contains(@class,"mp-city-list-container mp-privince-city")]')
当然也可以直接选取其属性的第二个值
.xpath('div[contains(@class,"mp-privince-city")]')
8.以..开始
'//li[starts-with(@code,"n")]/text()'starts-with定位属性值以n开头的li元素
9.属性包含值
'//h1[contains(text(),"标题")]'h1内容包含‘标题’字段的节点
10.当前节点之前的所有同级节点
'//div[@id="testid"]/preceding-sibling::div/ul/li[2]/text()'
11.当前节点的开始标签之前的所有节点
'//div[@id="testid"]/preceding::li[1]'
12.当前节点的父节点
'//li[@data="one"]/parent::ul'
13.同父辈元素
'//div[@id="testid"]/namespace::*'
14.父辈元素及当前元素
'//div[@id="testid"]/ancestor::div'所有父辈元素
'//div[@id="testid"]/ancestor-or-self::div'所有父辈元素及当前节点
15.选取文档中当前节点的结束标签之后的所有节点
xpath('//div[@id="testid"]/following::div[not(@id)]/.//li[1]/text()')
国内谷歌插件源极简插件