xpath
使用xpath选取结点
结点 描述
nodename(结点名称) 选取此节点下的全部子节点
/ 从根根节点选择,和绝对位置相似
// 从匹配选择的当前结点选择文档中的结点,而不考虑它们的位置,和相对位置相似
. 选择当前结点
… 选择当前结点的父结点
/text() 获取当前路径下面的文本内容,也就是获取当前路径下的以元素结点
/@*** 提取当前路径下标签的属性值
\(可选符) 可选择若干路径,(//p | //div)
选取xpath结点
公式 描述
xpath(’/boby/div[1]’) 选取boby结点下的第一个div结点
xpath(’/boby/div[last()]’) 选取boby结点下的最后一个div结点
xpath(’/boby/div[last()-1]’) 选取boby结点下的倒数第二个结点
xpath(’/boby/div[possion<3]’) 选取boby结点下的前两个div结点
xpath(’/boby/div[@class]’) 选取boby结点下带有class属性的div结点
xpath(’/boby/div[@class=“main”]’) 选取boby结点下c带有lass属性的div属性
xpath(’/boby/div[price>35.0]’) 选取boby结点下price元素大于35的div结点
XPath | JSONPath | Description |
---|---|---|
/ | $ | 表示根元素 |
. | @ | 当前元素 |
/ | . or [] | 子元素 |
.. | n/a | 父元素 |
// | .. | 递归下降,JSONPath是从E4X借鉴的。 |
* | * | 通配符,表示所有的元素 |
@ | n/a | 属性访问字符 |
[] | [] | 子元素操作符 |
| | [,] | 连接操作符在XPath 结果合并其它结点集合。JSONP允许name或者数组索引。 |
n/a | [start:end:step] |
数组分割操作从ES4借鉴。 |
[] | ?() | 应用过滤表示式 |
n/a | () | 脚本表达式,使用在脚本引擎下面。 |
() | n/a | Xpath分组 |
xpath的使用
# _*_ coding : utf-8 _*_
# @Time : 2022/5/3 21:05
# @File : 70_xPath的基本使用
# @Project : demo1
# 此安装的目的是从下载的页面源码中获取页面的数据
# 现在页面上安装xPath插件
# 使用pip安装lxml库
# xpath解析
# (1)本地文件 etree.parse()
# (2)服务器响应数据 etree.HTML()
from lxml import etree
tree = etree.parse("70_xPath的基本使用.html")
# tree.xpath("xpath路径")
# 查找ul下面的li
li_list = tree.xpath("//body/ul/li")
print(len(li_list))
# 查找所有有id的属性的li标签,谓词查询,格式为[@id],text()获取标签中的内容
li_list = tree.xpath("//ul/li[@id]/text()")
print(li_list)
# 查找id为beijing的id
li_list = tree.xpath("//ul/li[@id='beijing']/text()")
print(li_list)
# 查找到class属性值
li_list = tree.xpath("//ul/li/@class")
print(li_list)
# 查找到class为c1,id为beijing的属性值
li_list = tree.xpath("//ul/li[@id='beijing' and @class='c1']/text()")
print(li_list)
# 模糊查询contains/starts-with
li_list = tree.xpath("//ul/li[contains(@id,'shang')]/text()")
print(li_list)
# 以谁为开头
li_list = tree.xpath("//ul/li[starts-with(@id,'s')]/text()")
print(li_list)
# 因为id是唯一的,因此只能对于标签的内容进行或运算
li_list = tree.xpath("//ul/li[@id='beijing']/text() | //ul/li[@id='shanghai']/text()")
print(li_list)
评论区