前言
偶然看见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并不仅仅于此,对于目前的基础学习,选择内容仅了解如此。