ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • Python笔记

    • 基础知识

    • 并发编程

    • 爬虫笔记

      • 爬虫相关介绍
      • Requests模块
      • BeautifulSoup模块
      • Xpath模块
        • Xpath模块
          • 介绍
          • 常见使用场景
          • 常用轴
          • 常用函数
          • 基本语法
          • 逻辑运算
          • 解析HTML文档
          • 通过Xpath语法查找标签
      • DrissionPage模块
      • JS逆向基础
    • 模块笔记

    • 后端笔记

  • C笔记

  • C++笔记

  • Arduino笔记

  • Web笔记

  • Dev
  • Python笔记
  • 爬虫笔记
Hoshinozora
2025-11-02
目录

Xpath模块

# Xpath模块

# 介绍

xpath全称为XML Path Language它是一种小型的查询语言,和BeautifulSoup类似,都是用于在XML以及HTML文档中定位、查询和提取节点。它通过路径表达式描述节点之间的层级关系,类似文件系统的路径,能够快速定位单个节点、节点集合或属性。

XPath属于lxml库模块,所以首先要安装库lxml。

# 常见使用场景

数据抽取:从 XML/HTML 中快速抓取结构化信息(如爬虫、日志解析)。

配置文件读取:在配置 XML 中定位特定节点或属性。

自动化测试:Selenium、Appium 等工具通过 XPath 定位 UI 元素。

XML 转换:XSLT 中的节点选择与模板匹配。

文档校验:使用 XPath 断言 XML 文档结构是否符合规范。

# 常用轴

轴用于描述节点之间的关系,常见的有:

  • child(子节点)
  • descendant(后代节点)
  • parent(父节点)
  • ancestor(祖先节点)
  • following-sibling(后续兄弟)
  • preceding-sibling(前置兄弟)

示例://book/ancestor::bookstore选取所有book元素的祖先bookstore节点。

# 常用函数

函数 作用 示例
text() 取节点文本 //title/text()
contains() 包含判断 //book[contains(@category,'fiction')]
starts-with() 前缀判断 //author[starts-with(.,'张')]
position() 位置索引 //book[position()=1]
last() 最后一个节点 //book[last()]
string-length() 字符串长度 //title[string-length()>5]

# 基本语法

语法 含义 示例
/ 从根节点开始的绝对路径。 /bookstore/book
// 从当前节点向下任意层级查找。 //title
. 当前节点。 ./author
.. 父节点。 ../price
@ 属性选择。 //book/@category
* 通配符,匹配任意节点。 //*/price
[] 谓词(过滤条件)。 //book[price>30]

# 逻辑运算

XPath还能通过布尔运算符以及比较运算符来实现条件判断和组合。

布尔运算符

运算符 说明 示例
and 逻辑与,两个子表达式都为真才返回真 //book[price>30 and @category='fiction']
or 逻辑或,只要其中一个子表达式为真即返回真 //book[@category='history' or @category='science']
not() 逻辑非,对表达式取反 //book[not(@category='fiction')]

这些运算符只能在 谓词([...])内部使用,且 not() 的优先级最高,随后是 and,最后是 or。

比较运算符

运算符 说明 示例
= 等于(数值、字符串或节点集) //author[.='余华']
!= 不等于 //book[price!=45]
< 小于 //book[price<20]
<= 小于或等于 //book[price<=30]
> 大于 //book[price>50]
>= 大于或等于 //book[price>=100]

# 解析HTML文档

from lxml import etree

tree = etree.HTML(html)
1
2
3

# 通过Xpath语法查找标签

Python

## 使用selector.xpath()函数即可
# 当前节点是整个文档,所以该语句表示查找文档中所有的a标签,会将结果通过列表返回
a_list = tree.xpath("//a")

# 获取a列表第一个a标签的href属性的值
a_list[0].xpath('./@href')

# 获取a列表第一个a标签的文本
a_list[0].xpath('./text()')

# 查找所有id属性等于head并且class属性等于s_down的div标签
tree.xpath('//div[@id="head" and @class="s_down"]')

# 找所有包含id属性的div节点
tree.xpath('//div[@id]')

# 查找所有id属性等于maincontent的div标签
tree.xpath('//div[@id="maincontent"]')

# 获取li标签name为xx的里面的文本内容
tree.xpath('//li[@name="xx"]//text()')

# 获取第1个li标签
tree.xpath('//li[1]/a/text()')

# 获取倒数第2个li标签
tree.xpath('//li[last()-1]/a/text()')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

浏览器

直接在开发者工具的查看器中,使用搜索栏输入Xpath语法进行查找。

或者在控制台通过$x("Xpath语法")进行查找。

#爬虫#Xpath
BeautifulSoup模块
DrissionPage模块

← BeautifulSoup模块 DrissionPage模块→

最近更新
01
Vue路由
12-09
02
FastAPI实现用户管理
11-23
03
Tortoise ORM
11-23
更多文章>
Theme by Vdoing | Copyright © 2022-2026 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式