爬虫进阶开发——xpath选择器常见用法

俗话说,工欲上其事,必先利其器,学好xpath选择器,能极高的提升在爬虫的数据提取环节中的提取速度,下面我们来认识认识xpath。

选取节点

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

下面列出了最有用的路径表达式

表达式描述
nodename选取此节点的所有子节点。
/从根节点选取。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。

实例

1、精确查询

  1. $html =<<<STR
  2. <div id="demo">
  3. <span class="tt">bbb</span>
  4. <span>ccc</span>
  5. <p rel="pnode">ddd</p>
  6. </div>
  7. STR;
  8. // 获取id为demo的div内容
  9. $data = selector::select($html, "//div[@id='demo']");
  10. // 获取class为tt的span内容
  11. $data = selector::select($html, "//div[@class='tt']");
  12. // 获取rel为pnode的p内容
  13. $data = selector::select($html, "//div[@rel='pnode']");

2、模糊查询

contains 匹配一个属性值中包含的字符串

  1. $html =<<<STR
  2. <div id="demo1">
  3. demo1
  4. </div>
  5. <div id="demo2">
  6. demo2
  7. </div>
  8. STR;
  9. // 查找id属性中包含demo关键字的页面元素
  10. // 这里能获取id为demo1和demo2的内容
  11. $data = selector::select($html, "//div[contains(@id,'demo')]");

3、获取节点属性

  1. $html =<<<STR
  2. <td data-value="3.80">3.80</td>
  3. <td data-value="3.80">3.80</td>
  4. <td data-value="3.80">3.80</td>
  5. <td data-value="3.80">3.80</td>
  6. STR;
  7. // 获取 td 的 data-value 属性
  8. $data = selector::select($html, "//td@data-value");

XPATH的几个常用函数

1.contains (): //div[contains(@id, 'in')] ,表示选择id中包含有’in’的div节点

2.text():由于一个节点的文本值不属于属性,比如<a class=”baidu“ href=”http://www.baidu.com“>baidu</a&gt;,所以,用text()函数来匹配节点://a[text()='baidu']

3.last()://div[contains(@id, 'in')][las()],表示选择id中包含有'in'的div节点的最后一个节点

4.starts-with(): //div[starts-with(@id, 'in')] ,表示选择以’in’开头的id属性的div节点

5.not()函数,表示否定,//input[@name=‘identity’ and not(contains(@class,‘a’))] ,表示匹配出name为identity并且class的值中不包含a的input节点。 not()函数通常与返回值为true or false的函数组合起来用,比如contains(),starts-with()等,但有一种特别情况请注意一下:我们要匹配出input节点含有id属性的,写法如下://input[@id],如果我们要匹配出input节点不含用id属性的,则为://input[not(@id)]