xPath 用法总结整理
最近在研究kafka,看了一堆理论的东西,想动手实践一些东西,奈何手上的数据比较少,突发奇想就打算写个爬虫去抓一些数据来玩,顺便把深入一下爬虫技术。
之前写过一些小爬虫,一般就是用python的requests+lxml来爬取数据。这次打算学一下python的scrapy框架来爬取数据。解析网页内容还是打算用lxml,lxml使用了xpath语法,由于太久没用都忘光了。所以打算重新学习一下xpath语法,并做个总结,方便以后忘了可以马上回顾。
一、xpath介绍
-
XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。
-
XPath 使用路径表达式在 XML 文档中进行导航
-
XPath 包含一个标准函数库
-
XPath 是 XSLT 中的主要元素
-
XPath 是一个 W3C 标准
节点 -
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。
二、xpath语法
表达式 | 描述
nodename | 选取此节点的所有子节点。
/ | 从根节点选取。
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. | 选取当前节点。
.. | 选取当前节点的父节点。
@ | 选取属性。
- 例子
以下面这个xml为例子
<?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>
xml.xpath(“bookstore”) 表示选取 bookstore 元素的所有子节点
xml.xpath(“/bookstore”) 表示选取根元素 bookstore。
xml.xpath(“bookstore/book”) 选取属于 bookstore 的子元素的所有 book 元素。
xml.xpath(“//book”) 选取所有 book 子元素,而不管它们在文档中的位置。
xml.xpath(“bookstore//book”) 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
xml.xpath(“//@lang”) 选取名为 lang 的所有属性。
谓语
- 路径表达式 结果
- /bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
- /bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
- /bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
- /bookstore/book[position()❤️] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
- //title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
- //title[@lang=’eng’] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
- /bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
- /bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。
选取未知节点
- ** 通配符 描述**
- ** * 匹配任何元素节点。**
- ** @* 匹配任何属性节点。**
- node() 匹配任何类型的节点。
转载链接:https://blog.csdn.net/u013332124/article/details/80621638?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164853456416782092958612%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164853456416782092958612&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-2-80621638.142v5pc_search_result_control_group,143v6register&utm_term=xpath&spm=1018.2226.3001.4187