本文共 3544 字,大约阅读时间需要 11 分钟。
Xpath是一种强大的用于XML和HTML文档检索的语言,它允许开发者通过路径表达式准确地定位到指定节点。以下是Xpath的基本语法和常用表达式。
| 表达式 | 描述 | 示例 |
|---|---|---|
| nodename | 选取nodename节点的所有子节点 | //div |
| / | 选取根节点 | /div |
| // | 选取所有节点,不考虑位置 | //div |
| . | 选取当前节点 | ./div |
| .. | 选取当前节点的父节点 | .. |
| @ | 选取属性 | //@class |
| 表达式 | 描述 | 示例 |
|---|---|---|
| articl | 选取所有articl元素的子节点 | articl |
| /artical | 选取根元素artical | /artical |
| ./artical | 选取当前元素下的articl | ./artical |
| ../artical | 选取父元素下的articl | ../artical |
| articl/a | 选取所有articl的a子元素 | articl/a |
| //div | 选取所有div子元素,无论位置在哪里 | //div |
| articl//div | 选取所有articl下的div元素 | articl//div |
| //@class | 选取所有拥有指定class属性的div节点 | //@class |
| a/@href | 选取a标签的href属性值 | a/@href |
| a/text() | 选取a标签下的文本 | a/text() |
| string(.) | 解析当前节点下所有文字 | string(.) |
| string(..) | 解析父节点下所有文字 | string(..) |
Xpath中的谓语用于筛选满足特定条件的节点,常见用法如下:
| 表达式 | 描述 | 示例 |
|---|---|---|
| /artical/div[1] | 选取articl下的第一个div元素 | /artical/div[1] |
| /artical/div[last()] | 选取articl下的最后一个div元素 | /artical/div[last()] |
| /artical/div[last()-1] | 选取articl下的倒数第二个div元素 | /artical/div[last()-1] |
| /artical/div[position()<3] | 选取articl下的前两个div元素 | /artical/div[position()<3] |
| //div[@class] | 选取所有拥有class属性的div节点 | //div[@class] |
| //div[@class="main"] | 选取所有class为main的div节点 | //div[@class="main"] |
| //div[price>3.5] | 选取价格大于3.5的div节点 | //div[price>3.5] |
Xpath通过通配符来定位未知的或结构不固定的XML元素,常见表达式如下:
| 表达式 | 描述 | 示例 |
|---|---|---|
| //* | 选取所有元素 | //* |
| //div/* | 选取div元素的所有子节点 | //div/* |
| //div[@*] | 选取所有带属性的div元素 | //div[@*] |
使用“|”运算符可以同时指定多个路径,返回多个节点的结果:
| 表达式 | 描述 | 示例 | ||
|---|---|---|---|---|
| //div | table | 选取所有div和table节点 | //div | table |
| //div/a | //div/p | 选取div下的a和p元素 | //div/a | //div/p |
| articl/div/pl | //span | 选取div下的pl和所有span节点 | articl/div/pl | //span |
Xpath的轴用于定义相对于当前节点的节点集,常见用法如下:
| 轴名称 | 表达式 | 描述 |
|---|---|---|
| ancestor | ./ancestor::* | 选取当前节点的所有先辈节点 |
| ancestor-or-self | ./ancestor-or-self::* | 选取当前节点的所有先辈节点及节点本身 |
| descendant | ./descendant::* | 选取当前节点的所有后代节点 |
| child | ./child::* | 选取当前节点的所有子节点 |
| parent | ./parent::* | 选取当前节点的父节点 |
| following | ./following::* | 选取当前节点结束标签后的所有节点 |
| following-sibling | ./following-sibling::* | 选取当前节点之后的兄弟节点 |
| preceding | ./preceding::* | 选取当前节点开始标签前的所有节点 |
| preceding-sibling | ./preceding-sibling::* | 选取当前节点之前的兄弟节点 |
| self | ./self::* | 选取当前节点 |
| attribute | ./attribute::* | 选取当前节点的所有属性 |
Xpath的功能函数可以增强查询的灵活性,常见用法如下:
| 功能函数 | 用法 | 描述 |
|---|---|---|
| starts-with | //div[starts-with(@id,"ma")] | 选取id值以ma开头的div节点 |
| contains | //div[contains(@id,"ma")] | 选取所有id值包含ma的div节点 |
| and | //div[contains(@id,"ma") and contains(@id,"in")] | 选取id值同时包含ma和in的div节点 |
| text() | //div[contains(text(),"ma")] | 选取节点文本包含ma的div节点 |
| string() | string(.) | 解析当前节点下所有文字 |
CSS选择器是一种轻量级的节点定位语言,常用于现代网页开发,以下是CSS选择器的基本语法和实用示例。
| 选择器 | 描述 | 示例 |
|---|---|---|
| * | 选择所有节点 | * |
| #container | 选择id为container的节点 | #container |
| .container | 选择所有class为container的节点 | .container |
| div, p | 选择所有div和p节点 | div, p |
| li a | 选择所有li下的a节点 | li a |
| ul + p | 选择ul后面的第一个p节点 | ul + p |
| div#container > ul | 选择div中id为container的节点的第一个ul子节点 | div#container > ul |
| ul ~ p | 选择与ul相邻的所有p节点 | ul ~ p |
| a[title] | 选择所有有title属性的a节点 | a[title] |
| a[href="http://baidu.com"] | 选择所有href属性为http://baidu.com的a节点 | a[href="http://baidu.com"] |
| a[href*="baidu"] | 选择所有href属性中包含baidu的a节点 | a[href*="baidu"] |
| a[href^="http"] | 选择所有href属性以http开头的a节点 | a[href^="http"] |
| a[href$=".jpg"] | 选择所有href属性以.jpg结尾的a节点 | a[href$=".jpg"] |
| input[type=radio]:checked | 选择所有选中的radio节点 | input[type=radio]:checked |
| div:not(#container) | 选择所有不具有id为container的div节点 | div:not(#container) |
| li:nth-child(3) | 选择第三个li节点 | li:nth-child(3) |
| li:nth-child(2n) | 选择所有偶数个li节点 | li:nth-child(2n) |
| a::attr(href) | 选取a标签的href属性 | a::attr(href) |
| a::text | 选取a标签下的文本 | a::text |
| 方法 | 返回值 | 描述 |
|---|---|---|
| Selector.xpath() | SelectorList对象 | 返回匹配结果列表 |
| Selector.css() | SelectorList对象 | 返回CSS选择器匹配结果列表 |
| SelectorList.extract() | List对象 | 提取匹配结果列表中的所有节点 |
| SelectorList.extract_first(default) | String对象 | 提取匹配结果列表中的第一个节点,支持默认值 |
通过合理运用Xpath和CSS选择器,可以高效地提取网页中的结构化数据,满足各种开发需求。
转载地址:http://uqefk.baihongyu.com/