Python爬虫:XPath基本语法

xpath语法详解 # 从根节点开始// # 选择匹配的任何位置. # 当前节点.. # 父节点@ # 选择属性[node] # 选取所有node子元素[@attr] # 选取带有attr属性的所有元素。 阅读详情

XPath(XML Path Language)是一种用于在XML文档中定位元素的语言。它使用路径表达式来选择节点或节点集,类似于文件系统中的路径表达式。

不啰嗦,讲究使用,直接上案例。

导入

pip3 install lxml

from lxml import etree

案例样本

xml = '''
  <html lang="zh">
    <head>
      <meta charset="UTF-8">
      <title>示例网页</title>
    </head>
    <body>
      <h1>欢迎来到我的网站</h1>
      <p>这是一个简单的HTML页面,用于演示XPath解析。</p>
      <ul>
        <li><a href="https://www.example.com/page1">链接1</a></li>
        <li><a href="https://www.example.com/page2">链接2</a></li>
        <li><a href="https://www.example.com/page3">链接3</a></li>
      </ul>
      <div id="content">
        <h2>内容标题</h2>
        <p>这是一段内容。</p>
        <p>这是另一段内容。</p>
      </div>
    </body>
	</html>
'''
扫一扫欢迎关注,一起学习!

基本语法

表达式

描述

/

从根节点选取

//

从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(取子孙节点)

.

选取当前节点

..

选取当前节点的父节点

@

选取属性

tree = etree.HTML(html)

## 从根节点选取
data1 = tree.xpath('/html')
print('从根节点选取:',data1)

## 取head下title的值
data2 = tree.xpath('/html/head/title/text()')
print('取head下title的值:',data2)

## 取子孙节点值
data3 = tree.xpath('//p/text()')
print('取子孙节点值为:',data3)

## 选取当前节点值
all_p = tree.xpath('//p')
for p in all_p:
    print('选取当前节点:',p.xpath('.')) # 获取值话:./text()
    print('选取当前节点父节点:',p.xpath('..'))

## 获取html,lang属性
attr = tree.xpath('/html/@lang')
print('获取html,lang属性:',attr)

## 获取所有href的属性
href = tree.xpath('//@href')
print('获取所有href的属性:',href)
从根节点选取: [<Element html at 0x105346cc0>]

取head下title的值: ['示例网页']

取子孙节点值为: ['这是一个简单的HTML页面,用于演示XPath解析。', '这是一段内容。', '这是另一段内容。']

选取当前节点: [<Element p at 0x1055d1f40>]

选取当前节点父节点: [<Element body at 0x1055d90c0>]

选取当前节点: [<Element p at 0x1055d9040>]

选取当前节点父节点: [<Element div at 0x1055d90c0>]

选取当前节点: [<Element p at 0x1055d9080>]

选取当前节点父节点: [<Element div at 0x1055d90c0>]

获取html,lang属性: ['zh']

获取所有href的属性: ['https://www.example.com/page1', 'https://www.example.com/page2', 'https://www.example.com/page3']

条件选择基本语法

1. 选取属于ul子元素的第一个li元素的a 值,这里从 1 开始

tree.xpath('/html/body/ul/li[1]/a/text()')

2. 选取属于ul子元素的最后一个li元素的a 值

tree.xpath('/html/body/ul/li[last()]/a/text()')

3. 选取属于ul子元素的倒数第二个li元素的a 值

tree.xpath('/html/body/ul/li[last()-1]/a/text()')

4. 选取所有拥有名为 href 的属性的 a 元素

tree.xpath('//a[@href]')

5. 选取所有拥有名为 id=content 的属性的 div 元素

tree.xpath('//div[@id="content"]')

6. 选取 ul 元素的所有 li 元素,且其中的 a 元素的值须为 链接2,如果是数值可以比大小运算

tree.xpath('/html/body/ul/li[a="链接2"]')

选取属于ul子元素的第一个li元素a值: ['链接1']

选取属于ul子元素的最后一个li元素a值: ['链接3']

选取属于ul子元素的最后一个li元素a值: ['链接2']

选取所有拥有名为 href 的属性的 a 元素: [<Element a at 0x1026460c0>, <Element a at 0x102646140>, <Element a at 0x1026461c0>]

选取所有拥有名为 id=content 的属性的 div 元素: [<Element div at 0x102646240>]

选取 ul 元素的所有 li 元素,且其中的 a 元素的值须为 链接2: ['链接2']

通配符与运算选择基本语法

1. 选取 html 元素的所有子元素

tree.xpath('/html/*')

2. 选取文档中的所有元素

tree.xpath('//*')

3. 选取所有带有属性的 a 元素

tree.xpath('//a[@*]')

4. 选取 body 元素的所有 h1 和 p 元素

tree.xpath('//body/h1 | //body/p')

5. 选取文档中的所有 h1 和 p 元素

tree.xpath('//h1 | //p')
选取 html 元素的所有子元素: [<Element head at 0x1054de480>, <Element body at 0x1054de100>]

选取文档中的所有元素: [<Element html at 0x10518ee40>, <Element head at 0x1054de040>, <Element meta at 0x1054de440>, <Element title at 0x1054de180>, <Element body at 0x1054de4c0>, <Element h1 at 0x1054de540>, <Element p at 0x1054de140>, <Element ul at 0x1054de580>, <Element li at 0x1054de5c0>, <Element a at 0x1054de300>, <Element li at 0x1054de500>, <Element a at 0x1054de380>, <Element li at 0x1054de600>, <Element a at 0x1054de400>, <Element div at 0x1054de640>, <Element h2 at 0x1054de680>, <Element p at 0x1054de200>, <Element p at 0x1054de240>]

选取所有带有属性的 a 元素: [<Element a at 0x1054de300>, <Element a at 0x1054de380>, <Element a at 0x1054de400>]

选取 body 元素的所有 h1 和 p 元素: [<Element h1 at 0x1054de4c0>, <Element p at 0x1054de140>]

选取文档中的所有 h1 和 p 元素: [<Element h1 at 0x1054de440>, <Element p at 0x1054de140>, <Element p at 0x1054de200>, <Element p at 0x1054de240>]
xpath语法以及基本使用 xpath过滤xml 阅读详情

相关推荐

python网络爬虫从入门到精通吕云翔pdf_Python 网络爬虫从入门到精通

第1章 Python与网络爬虫11.1 Python语言11.1.1 什么是Python11.1.2 Python的应用现状21.2 Python的安装与开发环境配置31.2.1 在Windows上安装31.2.2 在Ubuntu和Mac OS上安装41.2.3 PyCharm的使用51.2.4 Jupyter Notebook91.3 Python基本语法121.3.1 H...

weixin_39591916的博客 2642

XPath入门

XPath是一种用于在 XML 文档中检索信息的语言。它通过路径表达式导航 XML 文档,广泛应用于各种场景。XPath的灵活性和强大功能使其成为在XML结构中准确定位和提取数据的重要工具。

冰万森的博客 1万+

Python爬虫 xpath,jsonpath,Beautifulsoup 基础(笔记)

1.xpath使用 xpath使用: 注意:提前安装xpath插件 (1)打开chrome浏览器 (2)点击右上角小圆点 (3)更多工具 (4)扩展程序 (5)拖拽xpath插件到扩展程序中 (6)如果crx文件失效,需要将后缀修改zip (7)再次拖拽 (8)关闭浏览器重新打开 (9)ctrl + shi...

Hitomi___的博客 357

Xpath语法基础

XPath 使用路径表达式在 XML 文档中进行导航XPath 包含一个标准函数库XPath 是 XSLT 中的主要元素XPath 是一个 W3C 标准XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。XPath 含有超过 100 个内建的函数。这些函数用于字符串值、数值、日期和时间比较、节点和 QName 处理、序列处理、逻辑值等等。关于这些函数,可参考网站文章XPath、XQuery 以及 XSLT 函数 | 菜鸟教程 (runoob.com)

梅花香自苦寒来,宝剑锋从磨砺出。 3638

【Python网络爬虫笔记】11- Xpath精准定位元素

Xpath,能够帮助开发者从复杂的网页结构中精准地提取所需信息。本文将深入探讨 Xpath 在 Python 网络爬虫中的作用、常用方法、安装与使用步骤以及典型案例。

zi__you的博客 2700

Python网络爬虫基本库

网络爬虫(Web Crawler)是一种自动化程序,用于从互联网上采集信息。它通过自动访问网页并提取所需的数据,实现对大量网页的快速检索和数据抓取网络爬虫通常使用HTTP协议来访问网页,并通过解析HTML、XML等网页内容来提取数据。爬虫可以从一个起始点(如某个特定网页)开始,然后根据链接关系自动地遍历和抓取其他相关网页。

Java/Python大数据随笔 3005

Python爬虫学习笔记_DAY_20_Python爬虫之xpath的使用方法介绍【Python爬虫】

p.s.高产量博主,点个关注????不迷路! 目录 I.xpath的安装 II.xpath的基本语法 I.xpath的安装 在第一部分安装的介绍之前,先介绍一下什么是xpath,以及为什么我们要学习xpath: XPath是一门在XML文档中查找信息的语言。XPath可用来在XML文档中对元素和属性进行遍历。 通俗的说,xpath可以用来精确的定位和切割某个标签,标签指的是我们的html文件的源码中的标签,例如<div></div>、<image>&

跳探戈的小龙虾的博客 2956

XPath语法全面总结

的全面总结,并附有具体的。轴用于相对定位其他节点。

weixin_45476869的博客 760

爬虫Xpath语法详解

xpath是定位dom元素非常直观的方法之一,在爬虫中的使用尤其常见。 文章目录绝对路径和xpath浏览器自带的xpath工具xpath语法常用符号定位元素多重定位多条件组合获取属性或文字xpath在爬虫中的使用 绝对路径和xpath 关于html的dom树这里就不赘述了,相信根节点,子节点,兄弟节点这些概念大家也都听的很多。 在一棵dom树里面,想定位某个元素有绝对路径和xpath的区分。如下图所示,选择了一个img标签以后点击右键,可以选择是复制xpath还是完整的路径 如果是绝对路径结果是这样的 /

T型人小付的博客 7835

〖Python网络爬虫实战⑫〗- XPATH语法介绍

前面我们实现了一个最基本的爬虫,但提取页面信息时使用的是正则表达式,过程比较烦琐,且万一有地方写错了,可能会导致匹配失败、所以使用正则表达式提取页面信息多少还是有些不方便.对于网页的节点来说、可以定义id,class或其他属性,而且节点之间还有层次关系,在网页中可以通过XPath或CSS选择器来定位一个或多个节点。那么、在解析页面时,利用XPath或CSS选择器提取某个节点,然后调用相应方法获取该节点的正文内容或者属性,不就可以提取我们想要的任意信息了吗?

爱吃饼干的小白鼠的博客 1016

〖Python网络爬虫实战⑬〗- XPATH实战案例

我们通过学习了简单的Xpath操作,以及在另外一篇xpath的实战案例下,本文,继续分享一个关于xpath的实战案例。xpath最大的难点就是如何写下path后面的语法,我们要找到对应的节点,就可以了。

爱吃饼干的小白鼠的博客 1539

python网络爬虫:使用XPath进行网页解析

python网络爬虫 使用XPath进行网页解析 使用Xpath解析网页 Xpath介绍 XML路径语言(XML Path Language),它是一种基于XML的树状结构,在数据结构树中找寻节点,确定XML文档中某部分位置的语言。 需要把源文件转成树状结构,再对树状结构应用相应的xpath查询语句 基本语法 使用Xpath需要从lxml库中导入etree模块,还需使用HTML类对需要匹配的HTML对象进行初始化(XPath只能处理文档的DOM表现形式)。HTML类的基本语法格式如下。 lxml.e

m0_51877411的博客 6306

深入STM32 USB OTG FS:从官方MSC例程到实战双存储设备移植全记录

本文详细解析了STM32 USB OTG FS在双存储设备开发中的实战应用,从协议栈底层机制到SD卡/SPI Flash同步挂载的实现。通过优化SDIO接口和SPI Flash驱动,结合USB MSC类的关键实现,提供了完整的解决方案和性能优化策略,适合嵌入式开发者参考。

weixin_28366475的博客 371

python——requests+xpath实现爬虫

本文章主要介绍使用python,通过requests+Xpath 爬虫的技术学习和实例。

lhl0306的博客 2425

Rust 与 C/C++:Rust 比 C/C++ 更好还是只是“技能问题”?

对于许多嵌入式系统开发人员而言,的崛起似乎掀起了一股不小的浪潮,特别是在相较于传统的语言,Rust的“内存安全”优势让人眼前一亮。然而,是否可以将Rust作为C/C++的替代品?或者说,Rust是否真的比C/C++更好,抑或它只是一个“技能问题”呢?在嵌入式开发的领域,我观察到,尽管Rust在一些高性能、内存安全敏感的场景中受到了广泛推崇,但它在实际应用中的普及度,特别是在嵌入式领域,依然有限。今天,我会从多个角度探讨这个问题,并且分享一些对于Rust、C/C++以及嵌入式系统开发的个人见解。

qq_63315166的博客 1300

Ubuntu20.04安全重启后WiFi图标消失?MT7922网卡驱动修复全攻略

本文详细解析了Ubuntu20.04安全重启后WiFi图标消失的问题,特别是针对MT7922网卡驱动失效的情况。通过诊断命令和分步解决方案,包括禁用PCIe ASPM、更新无线固件和升级HWE内核,帮助用户快速恢复网络连接。文章还提供了进阶排查技巧和系统优化建议,确保WiFi稳定运行。

weixin_29202687的博客 370

Python网络爬虫

Python网络爬虫—给????爪巴????1.网络爬虫的安全性2.网络爬虫的工作原理3.requests库1.requests库的常用函数2.request操作步骤3.response返回响应4.beautifulsoup4库1.常用的解析技术2.beautifulsoup4的操作步骤 网络爬虫,又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动请求万维网网站并提取网络数据的程序或脚本。 网络爬虫的相...

Aurora_1970s的博客 4576

学习Python,小白如何搭建Python环境?

学习Python,首先需要搭建好Python环境,主要分为【运行环境搭建】、【开发环境搭建】以及【Python环境配置】三个环节,接下来我将对Python环境搭建这三个部分进行介绍。

weixin_72923265的博客 9011

Python网络爬虫 二、Xpath语法详解

Python网络爬虫 二、Xpath语法详解 lxml是一个网页解析库。Xpath是一门在XML文档中查找信息的语言。Xpath课 用来在XML文档中对元素和属性进行遍历。 安装 pip install lxml 导入 import requests from lxml import etree 创建一个简单的html样本,注意其特点,层层嵌套。 htm = ''' <html> ...

Hanzoe的博客 821

别再手动更新Excel了!用Jira看板管理你的个人项目(附保姆级配置流程)

本文详细介绍了如何利用Jira看板替代Excel进行个人项目管理,提供从注册到配置的保姆级教程。通过极简看板模式、自动化规则和数据分析功能,帮助用户实现任务可视化、协作高效化和提醒自动化,大幅提升个人工作效率。特别适合需要管理复杂个人项目的用户。

weixin_42699679的博客 229

Grok 3国内怎么用?超详细使用指南+实用指令模板

主要是用于快速分析学术论文,提取关键信息,总结研究成果。Analyze the following research paper: [粘贴或上传论文内容]1. Extract key findings, methodologies, and conclusions. (提取主要发现、方法和结论。2. Identify statistical significance and data points. (识别统计显著性和数据点。

Survivor_sl的博客 1万+

基于python的网络爬虫

以ua伪装为例:ua即urser agent(用户代理):指客户端(如浏览器、手机 App、爬虫程序)向服务器发送请求时,附带的一段 “身份标识字符串”,用于告诉服务器 “我是什么设备 / 程序”。如下图,ua伪装通过获取网页内容时添加头文件中ua的伪装实现反反爬。伪装身份在哪里找:以获取浏览器访问百度的ua为例:浏览器打开百度,鼠标右击选择检查 ,选择网络,选择第一项双击进入,刚进来不会显示ua需要刷新网页,最后一行就是ua,复制就行。

sunxuehai1的博客 2110

FastBuilding 3DMAX插件:批量生成配楼,让建筑可视化告别手动重复建模

在建筑可视化与城市规划项目中,配楼群是营造城市氛围和方案完整度的关键,但几十上百栋配楼的建模往往成为工期瓶颈。传统复制粘贴或BOX贴图方式无法兼顾真实感与效率。FastBuilding作为一款3DMAX插件,通过参数化生成逻辑,将配楼制作转化为可调控的流水线:设定层高、面宽、窗户密度等参数,即可在视口内实时生成带完整外立面细节的实体模型;支持点选拉框和样条线批量生成两种模式,配合随机种子可快速产出丰富而不失协调的建筑群。该插件不仅面数控制合理,生成模型仍可继续编辑,尤其适合住宅区鸟瞰、规划投标及远景天际线等

weixin_28520495的博客 255

Python爬虫xpath语法及案例使用

利用XPath的所有用法,从常用语法,到案例练习都走了一遍

m0_72557783的博客 1815

matlab 点云可视化(1)——pcshow()函数可视化单个点云

matlab可视化单个点云常用方法汇总。

点云侠的博客 5361

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

网络爬虫的基本认识

静态网页的内容预先写在 HTML 文件中,加载时无需与服务器动态交互(如调用 API),直接通过浏览器解析 HTML 即可显示。页面源码(右键 “查看网页源代码”)中能直接看到所有内容(如文字、图片链接、表格数据);网址通常以.html.htm结尾(也可能是动态路由,但内容固定);对比动态网页:动态网页(如 JavaScript 渲染的页面)源码中看不到最终内容,需额外处理(静态爬取不涉及)。以下是几个必备工具。

Louisejrkf的博客 1565

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: 大数据命令,一文在手,全部都有2.0
下一篇: 可以讲讲Flink的优化吗,具体以项目中某个例子举例一下?
大数据左右手
博客等级 码龄9年 475粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值