XPath即XML(EXtensible Markup Language)路径语言(XML Path Language),它是一种用来确定xml文档(html属于xml)中某部分位置的语言(html主要是为了显示信息,xml为了传输信息)。
xml文档是由一系列节点构成的树,例如:
Hello World
Click here
xml文档有多种类型,最常用类型有以下几种:
根节点:整个文档树的根
元素节点:html、body、div、p、a
属性节点:href
文本节点:Hello World、Click here
节点间的关系有以下几种:
父子:body是html的子节点,p和a是div的子节点,反之,div是父节点
兄弟:p 和 a 是兄弟节点
祖先/后裔:body、div、p、a都是html的后裔节点,反过来html是body、div、p、a的祖先节点
常用基础语法
表达式 | 描述 |
/ | 选中文档的根(root) |
. | 选中当前节点 |
.. | 选中当前节点的父节点 |
ELEMENT | 选中子节点中所有ELEMENT元素节点 |
//ELELMENT | 选中后代节点中所有ELEMENT元素节点 |
* | 选中所有元素子节点 |
text() | 选中所有文本子节点 |
@ATTR | 选中名为ATTR的属性节点 |
@* | 选中所有属性节点 |
[谓语] | 用来查找某个特定的节点或者包含某个特定值的节点 |
实例,比如创建以下html文档用于演示。
<html> <head> <base href='http://example727.com/' /> <title>杂货铺727pythontitle> head> <body> <div> <p>Hello Worldp> <a id="logo" href="/index.html" title="杂货铺727python" style="float:left;">杂货铺727pythona> div> body>html>
>>> response = HtmlResponse(url='http://example.com')# /:描述一个从根开始的绝对路径>>> response.xpath('/html')[\n\t\n\t...'>]# E1/E2:选中E1子节点中的所有E2>>> response.xpath('/html/body/div/a')[# //E:选中文档中所有E,无论在什么位置>>> response.xpath('//a')[# E1//E2:选中E1后代节点中所有E2,无论在后代中什么位置>>> response.xpath('html//title')[]# E/text():选择E的文本子节点>>> response.xpath('html//title/text()')[]# E/*:选中E的所有元素子节点>>> response.xpath('html/head/*')['>, ]# */E:选中孙节点中的所有E>>> response.xpath('html/*/title')[]# E/@ATTR:选中E的ATTR属性>>> response.xpath('//a/@id')[]# //@*:选中E的所有属性>>> response.xpath('//base/@*')[]# .:选中当前节点,用来描述相对路径>>> sel = response.xpath('//div')>>> sel["logo" href=]>>>sel.xpath('.//a')["logo" href=# ..:选中当前节点的父节点>>> response.xpath('//a/..')[\n\t
Hello World
...