python爬虫(二)XPath

本文介绍了XPath作为XML文档信息查找语言的基础知识,包括XPath的七种节点类型,如元素、属性、文本等。详细讲解了XPath的路径表达式、谓语、通配符、选取多个路径以及轴的概念,这些都是在Python爬虫中使用XPath解析网页时的关键技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、XPath

XPath是一门在XML文档中查找信息的语言。XPath可用来在XML文档中对元素和属性进行遍历;

 

二、XPath节点

在XPath中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)

例如:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>    #文档节点

<book>#元素节点
  <title lang="en">Harry Potter</title>    #元素节点  lang=“en”是属性节点
  <author>J K. Rowling</author>     #元素节点
  <year>2005</year>    #元素节点
  <price>29.99</price>    #元素节点
</book>

</bookstore>

节点之间的嵌套形成了父子(patent、children)关系;

具有同一个父节点的不同节点是兄弟(sibling)关系;

 

三、XPath语法

XPath使用路径表达式来选取XML文档中的节点或节点集。节点是通过沿着路径(path)或者步(steps)来选取的;

1、路径表达式

表达式描述
nodename选取此节点的所有子节点
/从根节点选取
//从匹配选择的当前节点选取文档中的节点,而不考虑他们的位置
.选取当前节点
..选取当前节点的父节点
@选取属性

2、谓语

谓语用来查找某个 特定的节点 或者 包含某个指定的值的节点

谓语被嵌在方括号中;

路径表达式结果
/ bookstore / book[1]选取属于bookstore子元素的第一个book元素
/ bookstore / book[ last() ]选取属于bookstore子元素的最后一个book元素
/ bookstore / book[ last()-1 ]选取属于bookstore子元素的倒数第二个book元素
/ bookstore / book[ position()<3 ]选取前两个bookstore子元素的book元素
// title[ @lang ]选取所有属性名为lang的title元素
// title[ @lang='eng' ]选取所有属性lang='eng'的title元素
/ bookstore / book[ price>35.00 ]选取所有bookstore子元素的book元素,其中book元素的price值必须大于35
/ bookstore / book[ price>35.00 ] /title选取所有bookstore子元素的book元素的title元素,其中price元素值必须大于35

3、选取未知节点

XPath通配符可用来选取未知的XML元素;

通配符描述
*匹配任何元素节点
@*匹配任何属性节点
node()匹配任何类型的节点

4、选取若干路径

通过在路径表达式中使用  |  运算符,可以选取若干个路径;

 

5、XPath轴

轴可定义相对于当前节点的 节点集

轴名称结果
ancestor选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute选取当前节点的所有属性。
child选取当前节点的所有子元素。
descendant选取当前节点的所有后代元素(子、孙等)。
descendant-or-self选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following选取文档中当前节点的结束标签之后的所有节点。
namespace选取当前节点的所有命名空间节点。
parent选取当前节点的父节点。
preceding选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling选取当前节点之前的所有同级节点。
self选取当前节点。

6、步

步的语法

轴名称 :: 节点测试 [谓语]
例子结果
child::book选取所有属于当前节点的子元素的 book 节点。
attribute::lang选取当前节点的 lang 属性。
child::*选取当前节点的所有子元素。
attribute::*选取当前节点的所有属性。
child::text()选取当前节点的所有文本子节点。
child::node()选取当前节点的所有子节点。
descendant::book选取当前节点的所有 book 后代。
ancestor::book选择当前节点的所有 book 先辈。
ancestor-or-self::book选取当前节点的所有 book 先辈以及当前节点(如果此节点是 book 节点)
child::*/child::price选取当前节点的所有 price 孙节点。

7、XPath运算符

XPath表达式可返回节点集、字符串、逻辑值以及数字;

运算符描述实例返回值
|计算两个节点集//book | //cd返回所有拥有 book 和 cd 元素的节点集
+加法6 + 410
-减法6 - 42
*乘法6 * 424
div除法8 div 42
=等于price=9.80

如果 price 是 9.80,则返回 true。

如果 price 是 9.90,则返回 false。

!=不等于price!=9.80

如果 price 是 9.90,则返回 true。

如果 price 是 9.80,则返回 false。

<小于price<9.80

如果 price 是 9.00,则返回 true。

如果 price 是 9.90,则返回 false。

<=小于或等于price<=9.80

如果 price 是 9.00,则返回 true。

如果 price 是 9.90,则返回 false。

>大于price>9.80

如果 price 是 9.90,则返回 true。

如果 price 是 9.80,则返回 false。

>=大于或等于price>=9.80

如果 price 是 9.90,则返回 true。

如果 price 是 9.70,则返回 false。

orprice=9.80 or price=9.70

如果 price 是 9.80,则返回 true。

如果 price 是 9.50,则返回 false。

andprice>9.00 and price<9.90

如果 price 是 9.80,则返回 true。

如果 price 是 8.50,则返回 false。

mod计算除法的余数5 mod 21

8、这里只是列举了最常用的知识,如果想了解更多请移步:http://www.w3school.com.cn/xpath/index.asp

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值