Xpath表达式
/
代表从顶端开始寻找标签一层层寻找
例子:/html/head/title
text()
提取文本信息
例子:/html/head/titile/text()
@[]
提取属性
例子://li[@class=””]/a/@href 标签[@属性=值]
//
寻找所有标签
例子://li
/ /*
例子/div/* 选取属于div元素的所有子节点
//*
例子//* 选取所有元素
//div[@*]
选取所有带属性的title元素
/div/a|//div/p
选取所有div元素的a和p元素
//span|//ul
选取文档中的span和ul元素
Article/div/p|//span
选取所有属于article元素的div元素的p元素以及文档中所有的span元素
Contains()
当有多个class属性时使用contains函数获取
例子//span[contains(@class,’vote-post-up’)]
Re
re.compile(".*?(\d{4}[年/-]\d{1,2}([月/-]$|[月/-]\d{1,2}|[月/-]\d{1,2}日|$))").findall(str(data))
日期
[\u4E00-\u9FA5]+
中文
starts-with
匹配一个属性开始位置的关键字
Contains
driver.findElement(By.xpath(“//a[contains(text(), ’退出’)]));
匹配一个属性值中包含的字符串
text()
匹配的是显示文本信息,此处也可以用来做定位用
获取当前标签下的所有文字包括子标签
test= comment.xpath(".//span[@class='ctt']")
result = test[0].xpath('string(.)').strip()
following-sibling::td[1] 选择兄弟节点
//选择不包含class属性的节点
var result = node.SelectNodes(".//span[not(@class)]");
//选择不包含class和id属性的节点
var result = node.SelectNodes(".//span[not(@class) and not(@id)]");
//选择不包含class="expire"的span
var result = node.SelectNodes(".//span[not(contains(@class,'expire'))]");
//选择包含class="expire"的span
var result = node.SelectNodes(".//span[contains(@class,'expire')]");
//解析出带标签的当前元素
etree.tostring()
<div>
<a id="1" href="www.baidu.com">我是第1个a标签</a>
<p>我是p标签</p>
<a id="2" href="www.baidu.com">我是第2个a标签</a>
<a id="3" href="www.baidu.com">我是第3个a标签</a>
<a id="4" href="www.baidu.com">我是第4个a标签</a>
<p>我是p标签</p>
<a id="5" href="www.baidu.com">我是第5个a标签</a>
</div>
获取第三个a标签的下一个a标签:"//a[@id='3']/following-sibling::a[1]"
获取第三个a标签后面的第N个标签:"//a[@id='3']/following-sibling::*[N]"
获取第三个a标签的上一个a标签:"//a[@id='3']/preceding-sibling::a[1]"
获取第三个a标签的前面的第N个标签:"//a[@id='3']/preceding-sibling::*[N]"
获取第三个a标签的父标签:"//a[@id=='3']/.."
判断是否包含文字 root.xpath("//div[@id='sublist_div']/span[contains(text(),'简') and contains(text(),'日')]/text()")