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。

选取未知节点

posted @ 2022-03-29 15:04  且闻花香  阅读(205)  评论(0编辑  收藏  举报