当前位置: 首页 > news >正文

Xpath 提取数据

XPath,全称是 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言。它最初是用来搜寻 XML 文档的,但是它同样适用于 HTML 文档的搜索。

表 达 式 描  述
nodename 选取此节点的所有子节点
/ 从当前节点选取直接子节点
// 从当前节点选取子孙节点
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性

//title[@lang='eng'] 这就是一个 XPath 规则,它代表选择所有名称为 title,同时属性 lang 的值为 eng 的节点。

  • bookstore:选取 bookstore 元素的所有子节点。
  • /bookstore: 选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
  • bookstore/book: 选取属于 bookstore 的子元素的所有 book 元素。
  • //book: 选取所有 book 子元素,而不管它们在文档中的位置。
  • bookstore//book: 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
  • //@lang: 选取名为 lang 的所有属性
    在 XPath 中,contains( ) 是一个非常实用的字符串匹配函数,用于判断某个节点的文本或属性是否包含指定的子字符串,特别适合处理模糊匹配场景(如属性值含动态部分、多值属性等)

基础语法:contains(目标字符串, 待匹配的子字符串)
html = '<a href="/book/123" class="title">红楼梦</a>'

//a[@class="title"]/text() # 按class定位,提取文本
//a[contains(@href, "/book/")]/text() # 按href部分内容定位

image
一句话总结: / 是“直线路径”,// 是“地毯式搜索”。

通配符使用
XPath提供了多种通配符来简化表达式:

  1. *:匹配任何元素节点
    示例://*[@id='content'] 匹配任何id为content的元素
  2. @*:匹配任何属性节点
    示例://div[@*] 匹配所有带属性的div元素
  3. node( ):匹配任何类型的节点
    示例://div/node( ) 匹配div的所有子节点

xpath基本概念
xpath解析:最常用且最便捷高效的一种解析方式。通用性强。

xpath解析原理
1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中
2.调用etree对象中的xpath方法结合xpath表达式实现标签的定位和内容的捕获。
○ 将本地的html文件中的源码数据加载到etree对象中:
etree.parse(filePath)
○ 可以将从互联网上获取的原码数据加载到该对象中:
etree.HTML('page_text')

案例:
image
image

# 需求:获取昆明8-15天天气预报
import requests
from lxml import etree
url = 'https://www.weather.com.cn/weather15d/101290101.shtml'
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36'
}
response = requests.get(url,headers=headers)
response.encoding = 'utf-8'
# print(response.text)# 解析html为元素树
tree = etree.HTML(response.text)
lis = tree.xpath('//div[@id="15d"]/ul/li')
for li in lis:date = li.xpath('./span[1]/text()')[0]weather = li.xpath('./span[2]/text()')[0]temperature_max = li.xpath('./span[3]/em/text()')[0]temperature_min = li.xpath('./span[3]//text()')[1]print(date,weather,temperature_max,temperature_min)

image

http://www.hskmm.com/?act=detail&tid=19081

相关文章:

  • Java异常以及处理
  • 复习计划
  • RTC
  • 卡特兰数与反射容斥
  • 题解:QOJ9619/洛谷13568 [CCPC 2024 重庆站] 乘积,欧拉函数,求和(数论+状压DP)
  • Momentum Gradient Descent(动量梯度下降)
  • README
  • Halcon算子——2D几何变换
  • 深入解析:深度解析 CUDA-QX 0.4 加速 QEC 与求解器库
  • 实验作业1
  • 《C++程序设计》笔记p4 - 指南
  • 电脑显示器黑屏(闪烁:隔几秒中黑一两秒),向日葵远程正常——DeepSeek问答
  • 实用指南:iOS 26 兼容测试实战,机型兼容、SwiftUI 兼容性改动
  • 大中午记梦
  • 概率/期望 $dp$
  • 9.21~9.27 周总结
  • Jetbrains 全家桶激活码激活
  • 【深度学习计算机视觉】07:单发多框检测(SSD) - 指南
  • MZOI 2025.9.27
  • 原码 反码 补码
  • Spring Framework 远程命令执行漏洞
  • 配置本地环境以管理Git多账户SSH连接
  • Pod、 PVC 、PV的
  • 百度网盘ByPy使用配置指南
  • 完整教程:AI 术语通俗词典:Diffusion Models(扩散模型)
  • pip安装依赖包报错内容为User defined options,Native files 如何解决
  • edu 107 E(概率期望, dp)
  • 2025 年空气离合器生产厂家推荐榜:电网冲击缓解技术与可靠性测评,单片空气离合器,多片空气离合器,空气离合器摩擦片,空气离合器密封件公司推荐
  • Spring MVC的双向数据绑定
  • 抽象化编程(Abstraction in Programming)