XPath表达式是查询标记语言的方法(是选取XML或HTML中节点node的方法,节点通常是指XML/HTML中元素),XPath通过路径表达式(Path Expression)来选择节点信息,跟文件系统路径一样用/符号来分割路径
同一个节点有绝对路径与相对路径两种写法;1.绝对路径必须以/起首,后面紧跟根节点/step/step/...;2.相对路径step/step/...
. 当前节点
.. 当前节点父节点
nodename 节点名称:选择该节点的所有子节点
/ 选择根节点
// 选择任意节点
@ 选择属性
除此之外还可通过给表达式附加条件来选择指定数据,所有筛选条件均可附在一个[]符号中
/nbaplayer/team[1] 选择节点nbaplayer下第一个team子元素
//city[@name] 选择所有带有name属性的city节点
1.选择节点实例
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
bookstore 选取bookstore元素所有子节点
/bookstore 选取根节点bookstore,绝对路径
bookstore/book 选取所有属于bookstore子元素的 book元素,相对路径
//book 选择所有book子元素,不管它们在文档中的位置
bookstore//book 选择所有属于bookstore元素后代的book元素,不管位于bookstore下什么位置
//@lang 选取所有名为lang的属性
text() 提取标签中的文本
2.Xpath谓语条件
谓语条件即路径表达式的附加条件,都写在方括号[]中,表示对节点进行进一步筛选
/bookstore/book[1] 选择bookstore下第一个book子元素
/bookstore/book[last()] 选择bookstore最后一个book子元素
/bookstore/book[last()-1] 选择bookstore倒数第二个book子元素
/bookstore/book[position()<3] 选择bookstore前两个book子元素
//title[@lang] 选择所有具有lang属性的title节点
//title[@lang='eng'] 选择所有lang属性值等于"eng"的title节点
/bookstore/book[price] 选择bookstore的book子元素且被选中的book元素必须带有price子元素
/bookstore/book[price>35.00] 选择bookstore的book子元素且被选中book元素price子元素值(内容)必须大于35
/bookstore/book[price>35.00]/title 表示在上例结果集中,选择title子元素
/bookstore/book/price[.>35.00] 选择值大于35的"/bookstore/book"的price子元素
3.通配符
* 匹配任何元素节点
@* 匹配任何属性值
node() 匹配任何类型节点
//* 选择文档中所有元素节点
/*/* 选择第二层所有元素节点
/bookstore/* 选择bookstore所有元素子节点
//title[@*] 选择所有带属性的title元素
4.选择多个路径
//book/title | //book/price 同时选择book元素的title子元素和price子元素
5.Chrome获取xpath
1:将鼠标放在想提取的内容上
2:然后右键“检查”
3:浏览器右侧会自动定位到内容的源代码上
4:在源代码上点击右键,然后弹出一个列表,选择“copy”
5:在弹出的选项中,选择“Copy Xpath”
例:丽沙花都小区名的xpath路径,直接复制得到的内容为://*[@id="list-content"]/div[2]/div[1]/h3/a ,但放到html_nodes()时要注意,需要将list-content的双引号改为单引号