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