侧边栏壁纸
博主头像
winson的blog博主等级

行动起来,活在当下

  • 累计撰写 31 篇文章
  • 累计创建 37 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

xpath的基本使用

winson
2024-04-09 / 0 评论 / 1 点赞 / 21 阅读 / 3881 字

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)
1

评论区