尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Python 使用 XPath 查找元素基本用法实战指南
前言在爬虫、网页数据提取场景中解析HTML常用两种方案CSS选择器、XPath。XPath 功能更强大支持父子层级、属性模糊匹配、文本匹配、多条件筛选是 Python 爬虫主流解析方式。很多同学刚开始使用 XPath 经常遇到路径写错、找不到元素、匹配规则失效等问题。本文基于lxml最常用库讲解 XPath 在 Python 中的基础语法、常用案例、避坑要点所有代码可直接运行。说明本文使用XPath 1.0lxml 仅支持 XPath 1.0部分 XPath2.0 函数无法使用。一、环境准备安装依赖pip install lxml基础载入模板from lxml import etree html html body div idbox h2 classtitlePython XPath教程/h2 div classitem文章1/div div classitem文章2/div div idc_001ID以c开头的区块/div div idd_001普通区块/div a hrefhttps://www.baidu.com百度/a /div /body /html # 构建解析对象 tree etree.HTML(html)二、绝对路径 vs 相对路径1. 绝对路径不推荐从根节点一层层往下写结构一旦变动直接失效。# 查找h2文本 res tree.xpath(/html/body/div/h2/text()) print(res)2. 相对路径日常开发首选//标签名全局搜索任意位置查找该标签.//标签名在当前节点内部搜索重点# 全局查找所有h2 res tree.xpath(//h2/text()) # 先拿到box节点再在box内部查找所有div box_node tree.xpath(//div[idbox])[0] items box_node.xpath(.//div/text()) print(items)⚠️ 高频踩坑在节点对象上调用xpath如果不加.//依旧会全局搜索不会限定在当前节点三、获取文本、属性、节点对象1./text()获取标签内直接文本# 获取h2内部文本 title tree.xpath(//h2/text())[0] print(title)2.属性名获取属性值# 获取a标签href链接 href tree.xpath(//a/href)[0] print(href)3. 不使用/text()直接获取元素对象想要打印元素完整HTML源码时必须拿到节点对象不能提取文本h2_node tree.xpath(//h2)[0] # 输出完整标签HTML html_str etree.tostring(h2_node, encodingutf-8).decode(utf-8) print(html_str)四、属性筛选语法最常用4.1 属性精确匹配//div[idbox] //h2[classtitle]python示例node tree.xpath(//div[idbox])坑点class 内存在多余空格时精确匹配会失败例如classelement-header 4.2 模糊匹配三大核心函数lxml支持XPath1.0内置三个函数starts-with(属性, 开头字符)属性以指定内容开头# 查找id以c开头的div c_divs tree.xpath(//div[starts-with(id, c)])contains(属性, 关键词)属性包含关键词# class包含item的div item_divs tree.xpath(//div[contains(class, item)])ends-with()不支持属于XPath2.0lxml无法使用。4.3 多条件组合and / or# classitem 并且文本包含文章 res tree.xpath(//div[classitem and contains(text(), 文章)]/text())五、层级关系筛选/直接子节点//div[idbox]/h2只匹配box下直接子元素h2孙子层级不会匹配//后代所有节点子、孙、曾孙//div[idbox]//div匹配第N个元素[position()]# 第一个class为item的div first_item tree.xpath(//div[classitem][1]/text()) # 最后一个 last_item tree.xpath(//div[classitem][last()]/text())六、文本匹配技巧匹配标签内文本# 文本完全等于 res tree.xpath(//h2[text()Python XPath教程]/text()) # 文本包含关键词 res tree.xpath(//h2[contains(text(), XPath)]/text())注意标签存在换行、空格时text()精确匹配容易失败优先使用contains七、实战通用模板模板1在指定节点内部循环提取元素# 拿到父节点 box tree.xpath(//div[idbox])[0] # 在父节点内查找所有item item_list box.xpath(.//div[classitem]) for item in item_list: text item.xpath(./text())[0] print(text)模板2获取元素完整HTMLdef get_html(elem): return etree.tostring(elem, encodingutf-8).decode(utf-8) item_node tree.xpath(//div[classitem][0])[0] print(get_html(item_node))八、高频踩坑清单在节点对象使用xpath忘记加.box.xpath(//div)全局搜索box.xpath(.//div)才是内部搜索class带有多余空格直接使用classxxx精确匹配失败改用contains想打印HTML却写了/text()拿到字符串而不是元素对象混淆/和//需要后代却只写直接子节点/试图使用ends-with()、lower-case()函数lxml不支持XPath2.0xpath匹配结果为空列表直接[0]取值触发报错建议增加判断result tree.xpath(//h2/text()) if result: print(result[0])九、补充Selenium / DrissionPage 兼容说明如果你使用 DrissionPage、SeleniumXPath语法完全通用# DrissionPage示例 items page.xpath(.//div[starts-with(id,c)])区别selenium获取文本使用.text属性不再依赖/text()。总结.//xxx限定当前节点内部查找//xxx全局查找精确匹配用属性值模糊匹配优先starts-with、contains需要HTML源码就不要加/text()保留元素对象优先使用相对路径避免脆弱的绝对路径lxml只支持XPath1.0不要使用XPath2.0专属函数。掌握以上基础用法可以覆盖80%网页数据提取场景。复杂爬虫筛选需求都可以在这套基础语法上进行组合扩展。
RELATED

相关推荐

开题直接一遍过✅Paperxie智能开题报告|告别导师反复打回

开题直接一遍过✅Paperxie智能开题报告|告别导师反复打回

开题直接一遍过✅Paperxie智能开题报告|告别导师反复打回 毕业论文第一大难关,绝对是开题报告! 很多同学还没正式写论文,就卡在开题阶段无限返工:选题没依据、研究逻辑混乱、国内外研究现状堆砌、框架不符合学校格式…

📅 2026/10/8 18:53:29
CSDN_动态配气原理与两种动态_优化版

CSDN_动态配气原理与两种动态_优化版

动态配气仪原理详解:MFC 配比计算、与静态配气的本质区别,及“动态”的两个意思动态配气仪怎么选型、MFC 怎么算配比、动态配气和静态配气到底差在哪——这篇把原理、公式和最容易写岔的“动态”两个含义一次讲清。建议收藏,选型前对照一遍。…

📅 2026/10/11 7:05:25
用 Rust 类型系统表达接口状态,别把错误压成字符串

用 Rust 类型系统表达接口状态,别把错误压成字符串

用 Rust 类型系统表达接口状态,别把错误压成字符串 编译期能阻止多少错误,取决于接口有没有把业务约束交给类型系统。若所有输入都是 String,所有失败也都是 String,Rust 只能保证内存安全,无法替你区分状态。 让非法状…

📅 2026/9/15 14:53:11
MORE NEWS

更多资讯

📰

YOLO-Master目标检测技术解析与优化实践

1. YOLO-Master与YOLO技术演进解析在计算机视觉领域,目标检测算法的发展始终围绕着精度与速度的平衡展开。YOLO(You Only Look Once)系列作为单阶段检测器的代表,从2016年Joseph Redmon提出初代版本至今,已经迭代出多个…

📰

生成式音频落地实战:MiniMax Music在影视配乐工作流中的深度集成

项目标题中“MiniMax Music 客户案例:Silverside”这一表述,表面看是一个典型的企业服务案例命名结构,但细究其构成,会发现几个关键信号点:MiniMax是一个在生成式AI音频领域持续有技术输出的模型研发主体(非…

📰

libcurl/WinHTTP 实现 HTTPS GET/POST 客户端

简介:面向Windows平台C网络编程学习者的HTTP/HTTPS请求实现资料包,围绕GET与POST两类常用请求,给出libcurl与WinHTTP两条技术路线的可编译工程。前者用CHttpClient类封装HTTP、HTTPS的GET与POST调用,后者由WinHttpClient类完成同等…

📰

DeepSeek-R1推理模型:专为可验证逻辑任务设计的开源AI工具

简介:本资源是清华大学新闻与传播学院新媒体研究中心元宇宙文化实验室出品的104页深度学习实践指南,面向AI初学者、NLP开发者及大模型应用从业者,系统解决DeepSeek模型认知、场景落地与人机协同能力构建三大核心问题。内容覆盖DeepSeek公司定…

📰

儿童AI英语工具开发:从语音识别到动画反馈的教育适配实践

1. 这不是“玩具项目”,而是一次真实教育场景的逆向工程“为了孩子的英语,我花一个月vibe coding了一个AI英语学习工具”——这句话刚在家长群被转发时,我下意识点开链接,本以为又是某款包装精美的付费App宣传页。结果看到GitHub仓…

📰

TYGER 是什么?一文读懂 NineNineSix 开源全双工语音决策模型

人工智能语音音频基础模型本地部署 【免费下载链接】tyger 项目地址: https://ai.gitcode.com/hf_mirrors/nineninesix/tyger 点击查看 免费下载 TYGER 是 NineNineSix 开源的全双工语音决策模型(open-weight),专为实时语音对话设…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬