前言

偶然看见​​python​​的​​scrapy​​框架,由于兴趣的吸引,最近如入门式的学习,在学习过程中遇到了xpath的相关知识,在此进行总结方面日后查询和记忆。

参考:

​菜鸟教程​

理解

​XPath​​​是一门在 ​​XML​​​ 文档中查找信息的语言。当然也可以运用于​​HTML​​。在scrapy中用来查找页面需要的内容。

实例

<?xml version="1.0" encoding="UTF-8"?>

<bookstore>
<h1>Example</h1>
<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>

选取节点


  • ​节点名​​:选取此节点的所有子节点
  • ​/​​:从根节点选取
  • ​//​​:从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(理解)
  • ​.​​:选取当前节点
  • ​..​​:选取当前节点的父节点
  • ​@​​:选取属性

注:这些语法可以混合使用。

表达式

说明

article

选取所有article元素的所有子节点

/article

选取根元素article

article/a

选取所有属于article的子元素的a元素(不考虑位置)

/div

选取所有div元素

article//div

选取所有article元素的后代div元素

//@class

选取所有名为class的属性

选取多个class

<div class = "h-entry toc-sidebar">...</div>

要注意的是匹配这样的div通过​​xpath('//div[@class="h-entry"]')​​​或​​xpath('//div[@class="toc-sidebar"]')​​​是无法获取的,可通过​​xpath('//div[contains(@class,"h-entry")]')​​​或 ​​xpath('//div[contains(@class,"toc-sidebar")]')​​​进行匹配到,最好的是​​xpath('//div[contains(@class,"h-entry") and contains(@class,"toc-sidebar")]')​

谓语

谓语用来查找某个特定的节点或者包含某个指定的值的节点。谓语被嵌在方括号中。


  • ​[number]​​​:匹配的第​​number​​个节点。
  • ​[last-number]​​​:当​​number​​​为​​0​​时选取最后一个,其他倒数匹配。
  • ​[position()<number]​​​:选取匹配的前​​number-1​​个元素。
  • [​​@lang​​​]:选取所有拥有名为​​lang​​ 的属性的节点。
  • ​[@lang='eng']​​​: 元素拥有值为 ​​eng​​​的 ​​lang​​ 属性。

通配符


  • ​*​​ :匹配任何元素节点。
  • ​@*​​ :匹配任何属性节点。
  • ​node()​​ :匹配任何类型的节点。

选取若干路径

通过在路径表达式中使用​​|​​运算符,您可以选取若干个路径。

结尾

当然关于xpath并不仅仅于此,对于目前的基础学习,选择内容仅了解如此。