XPath 自学教程

Python爬虫自学系列(二) 今天我们来从获取到的网页数据中抓取我们想要的数据。 (注:这一篇里面很多东西都已经是讲过的了,所以本篇基本上是链接了,也不会很长的) 阅读详情

前言

  • 在学习之前应该具备的知识
    • HTML/XHTML
    • XML/XML Namespaces

XPath 简介

XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。

XPath 节点

XPath 术语

XPath中的术语:节点(Node)、基本值(原子值 Atommic value)、项目


节点:在XPath中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。XML文档被作为节点树来对待。
基本值:是无父或无子的节点
项目:是基本值或节点


XMl例子:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore> <!-- 文档节点(或称根节点) -->

<book>
  <title lang="en">Harry Potter</title> <!-- 元素节点 --> <!-- lang="en" 属性节点 -->
  <author>J K. Rowling</author> <!-- J K. Rowling 基本值 -->
  <year>2005</year>
  <price>29.99</price>
</book>

</bookstore>

节点关系

父(Parent)、子(Children)、同胞(Sibling)、先辈(Ancestor)、后代(Descendant)


父:每个元素以及属性都有一个父。 在上面的例子中,book元素是tittle、author、year、price元素的父。
子:元素节点可有零个、一个或多个子。 在上面的例子中,title、author、year、price元素都是book元素的子。
同胞:拥有相同的父节点。 在上面的例子中,title、author、year、price元素都是同胞。
先辈:某节点的父、父的父,等等。 在上面的例子中,title元素的父是book元素和bookstore元素。
后代:某节点的子、子的子,等等。 在上面的例子中,bookstore的后代是book、title、author、year、price元素


XPath 语法

选取节点

XPath使用路径表达式在XML文档中选取节点。节点通过沿着路径(或步step)来选取
路径表达式:

表达式描述例子结果
nodename选取此节点的所有子节点。bookstore选取bookstore元素的所有子节点。
/从根节点选取。/bookstore选取根元素bookstore。
/bookstore/book选取属于bookstore的子元素的所有book元素。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。//book选取所有book子元素,而不管它们在文档中的位置。
//bookstore//book选取bookstore元素的后代的所有book元素,而不管它们位于bookstore之下的什么位置。
.选取当前节点。
…选取当前节点的父节点。
@选取属性。//@lang选取名为lang的所有属性。

谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定值的节点。
谓语被嵌在方括号中。
带谓语的路径表达式:

路径表达式结果
/bookstore/book[1]选取属于bookstore子元素的第一个book元素。
/bookstore/book[last()]选取属于bookstore子元素的最后一个book元素。
/bookstore/book[last()-1]选取属于bookstore子元素的倒数第二个book元素。
/bookstore/book[position() < 3]选取最前面的两个属于bookstore元素的子元素的book元素。
//title[@lang]选取所有拥有名为lang的属性的title元素。
//title[@lang=‘eng’]选取所有title元素,且这些元素拥有值为eng的lang属性。
/bookstore/book[price>35.00]选取bookstore元素的所有book元素,且其中的price元素的值须大于35.00。
/bookstore/book[price>35.00]/title选取bookstore元素中book元素的所有title元素,且其中的price元素的值须大于35.00。

选取未知节点

XPath通配符可用来选取未知的XML元素。
实例:

通配符描述实例结果
*匹配任何元素节点/bookstore/*选取bookstore元素的所有子元素。
@*匹配任何属性节点//*选取文档中所有元素。
node()匹配任何类型节点//title[@*]选取所有带有属性的title元素。

选取若干路径

通过在路径表达式中使用“|”运算符,可以选取若干个路径。
实例:

路径表达式结果
//book/title | //book/price选取book元素的所有title和price元素。
//title | //price选取文档中所有的title和price元素。
/bookstore/book/title | //price选取属于bookstore元素的book元素的所有title元素,以及文档中所有的price元素。

XPath Axes(轴)

XPath 轴

轴可定义相对于当前节点的节点集

轴名称结果
ancestor选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self选取当前节点的所有先辈以及当前节点本身。
attribute选取当前节点的所有属性。
child选取当前节点的所有子元素。
descendant选取当前节点的所有后代元素(子、孙等)。
descendant-or-self选取当前节点的所有后代元素以及当前节点本身。
following选取文档中当前节点的结束标签之后的所有节点。
namespace选取当前节点的所有命名空间节点。
parent选取当前节点的父节点。
preceding选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling选取当前节点之前的所有同级节点。
self选取当前节点。

位置表达式

位置路径可以是绝对的,也可以是相对的。


绝对路径起始于正斜杠(/),而相对路径不会这样,在两种情况中,位置路径均包括一个或多个步,每一步均被斜杆分割:
绝对路径:

/step/step/...

相对路径:

step/step/...

每个步均根据当前节点集之中的节点来进行计算。
步(step)包括:
轴(axis):定义所选节点与当前节点之间的树关系
节点测试(node-test):识别某个轴内部的节点
零个或更多谓语(predicate):更深入的提炼所选的节点集


步的语法:

轴名称::节点测试[谓语]

实例:

例子结果
child::book选取所有属于当前节点的子元素的book节点。
attribute::lang选取当前节点的lang属性。
child:: *选取当前节点的所有子元素。
attribute:: *选取当前节点的所有属性。
child::text()选取当前节点的所有文本子节点。
child::node()选取当前节点的所有子节点。
descendant::book选取当前节点的所有book后代。
ancestor::book选取当前节点的所有book先辈。
ancestor-or-self::book选取当前节点的所有book先辈以及当前节点(如果此节点是book节点)。
child:: */child::price选取当前节点的所有price孙节点。

XPath 运算符

XPath 表达式可以返回节点集、字符串、逻辑值以及数字。
运算符:

运算符描述实例返回值
¦计算两个节点集//book ¦ //cd返回所有拥有book和cd的节点集
+加法6+410
-减法6-42
*乘法6*424
div除法8div42
=等于price=9.80如果price是9.80,则返回true。如果price不是9.80,则返回false。
!=不等于price!=9.80如果price是9.90,则返回true。如果price是9.80,则返回false。
<小于price<9.80如果price是9.00,则返回true。如果price是9.90,则返回false。
<=小于或等于如果price<=9.80如果price是9.00,则返回true。如果price是9.90,则返回false。
>大于price>9.80如果price是9.90,则返回true,如果price是9.80,则返回false。
>=大于或等于price>=9.80如果price是9.90,则返回true。如果price是9.70,则返回false。
or或price=9.80 or price=9.70如果price是9.80,则返回true。如果price是9.50,则返回false。
and与price>9.00 and price<9.90如果price是9.80,则返回true。如果price是8.50,则返回false。
mod计算除法的余数5mod21

XPath 实例

在本节,让我们通过实例来学习一些基础的 XPath 语法。

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book category="COOKING">
  <title lang="en">Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>

<book category="CHILDREN">
  <title lang="en">Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

<book category="WEB">
  <title lang="en">XQuery Kick Start</title>
  <author>James McGovern</author>
  <author>Per Bothner</author>
  <author>Kurt Cagle</author>
  <author>James Linn</author>
  <author>Vaidyanathan Nagarajan</author>
  <year>2003</year>
  <price>49.99</price>
</book>

<book category="WEB">
  <title lang="en">Learning XML</title>
  <author>Erik T. Ray</author>
  <year>2003</year>
  <price>39.95</price>
</book>

</bookstore>
<html>
<body>
<script type="text/javascript">
function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
  {
  xhttp=new XMLHttpRequest();
  }
else
  {
  xhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xhttp.open("GET",dname,false);
xhttp.send("");
return xhttp.responseXML;
}

xml=loadXMLDoc("/example/xmle/books.xml");
path="/bookstore/book/title"
// code for IE
if (window.ActiveXObject)
{
var nodes=xml.selectNodes(path);

for (i=0;i<nodes.length;i++)
  {
  document.write(nodes[i].childNodes[0].nodeValue);
  document.write("<br />");
  }
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null);
var result=nodes.iterateNext();

while (result)
  {
  document.write(result.childNodes[0].nodeValue);
  document.write("<br />");
  result=nodes.iterateNext();
  }
}
</script>
</body>
</html>

XPath 函数

XPath 函数

下一步应该学习什么呢?

您下一步该学习:XSLT、XQuery、Xlink、XPointer


XSLT:是针对XML文件的样式表语言,通过XSLT可以将XML文件转换为其他格式,比如XHTML。
XQuery:其与XML数据查询有关。其被设计用来查询任何可作为XML形态呈现的数据,包括数据库。
XLink和XPointer:定义了在XML文档中创建超级链接的标准方法。


写文档遇到的趣事

< 和 3 组合就可以呈现下面的爱心
: 和 ‘*’ 组合就可以呈现下面的脸 注(去掉*旁边的单引号)


❤️ ❤️ ❤️ ❤️ ❤️ ❤️
😗 😗 😗 😗 😗 😗


参考文献

W3Cschool

xPath学习教程(全) XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。 XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。 资料整理来源:http://www.cnblogs.com/zhaozhan/archive/2009/09/09/1563617.html 内附:dom4j教程(全)一份 立即下载

相关推荐

单细胞数据导入实战:Read10X函数常见报错与解决方案

本文针对单细胞转录组分析中Read10X函数数据导入的常见问题,提供了详细的实战解决方案。重点解析了因文件路径错误、压缩文件未解压、版本命名不符及内存不足导致的报错,并给出了检查路径、正确解压、重命名文件、调整参数及优化内存等具体操作步骤,帮助用户高效完成单细胞数据导入,为后续分析奠定坚实基础。

weixin_28235513的博客 237

Xpath库的用法总结

文章目录一.初始化1.读取字符串初始化2.读取文本文件初始化二.查找节点A.标签匹配1.所有节点: //* 可通过下标索引选择对应的节点2.选取特定子节点: //li/a //li//a ; /只用于获取子节点, //用于获取所有子孙节点B.属性匹配1.属性匹配2.属性多值匹配:通过contains(@class,"key")即可筛选出包含key的标签3.多属性匹配:若多个属性匹配一个节点,可以通过and来并列,如@class="item-0" and @name="li"C.关系匹配1.按序选择节点:

Yang's Blog 464

深入解析DMR协议中的4-CPFSK调制技术与实现

本文深入解析了DMR协议中采用的4-CPFSK调制技术。该技术凭借其连续相位、恒包络的特性,在有限的12.5kHz信道带宽内实现了稳健的通信,有效对抗干扰并提升功放效率,是DMR数字对讲机清晰、稳定通信的核心保障。文章详细阐述了其原理、实现细节及在协议栈中的协同作用。

weixin_29306875的博客 229

【PostgreSQL】从零开始:(二十八)数据类型-XML类型

XML(可扩展标记语言)是一种用于描述数据的标记语言。它被设计用于传输和存储数据,以及作为不同系统之间进行数据交换的通用格式。XML使用标记来标识数据元素,并使用嵌套的结构来表示数据之间的层次关系。XML具有以下特点:可扩展性:XML允许用户自定义标记,从而可以根据特定的需求定义自己的元素和属性。独立性:XML是与平台和应用程序无关的,可以在不同的系统和环境中使用。可读性:XML使用标记和嵌套结构来表示数据,使数据易于理解和阅读。

圈小圈DBA的博客 1340

宝塔部署若依前端出现502解决方法

若依系统是一个基于Java语言的开源项目,旨在帮助开发者减少开发时间,特别适用于需要快速开发出一套具有用户管理、菜单管理、权限管理、定时任务、日志管理等功能的简单系统。系统分为前后端分离、分布式等架构前后端分离部署教程然而通过宝塔来部署若依系统会遇见一些问题,特此在这里记录一下。

m0_74823683的博客 776

Obsidian + AI 自动知识管理:手把手教程

装完后,在命令面板(Ctrl+P)搜 "Generate Summary",AI 会在当前笔记末尾追加一段摘要。你一个月前写的、现在想快速回顾的笔记长篇笔记(三千字以上)开会记录这类信息密集的内容过度自动化。有人装上插件后,所有笔记都让 AI 打标签、写摘要、找关联。最后笔记库看起来整整齐齐,但全都是 AI 的链接,你自己完全没参与。这样做的后果是什么?你写过的笔记跟你没有"真实连接"。你还是记不住。你还是不知道自己的知识库里有什么。AI 推荐,你决策。

weixin_43571227的博客 747

PostgreSQL中的XML操作函数

  <!-- var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document.write(unescape("%3Cscript src=" + gaJsHost + "google-analytics.com/g

步行者的专栏 6926

STM32cubeMX配置FreeRTOS软件定时器

文章目录前言1.软件定时器概述一.软件定时器特性二、使用cubeMX生成软件定时器总结 前言 本文主要带大家了解什么是软件定时器,并且带大家使用cubeMX配置软件定时器。 1.软件定时器概述 一.软件定时器特性 软件定时器就是一个闹钟当时间到了就执行相对应的任务或者代码。软件定时器是基于系统滴答中断的。在FreeRTOS中我们可以设置无数个软件定时器。 指定时间:启动定时器和运行回调函数,两者的间隔被称为定时器的周期 (period)。 指定类型定时器有两种类型: 1.一次性 这类定时器启动后,它的回调函

m0_49476241的博客 6948

Java XPath 使用(2023/08/29)

众所周知,Java 语言适合应用于 Web 开发领域,不擅长用来编写爬虫。但在 Web 开发过程中有时又存在爬取数据的需求,此时采用其它语言编写独立爬虫模块的话存在维护不方便的问题,所以此处笔者选择了使用 Java + XPath 实现简单的爬虫功能,如果爬虫需求较多且复杂还是推荐采用其它语言实现独立的爬虫模块。

xiaoQQya的博客 1588

备赛电赛学习硬件篇(二):电源板电路设计

1、输入接口要准备各种接口,如2p端子,锂电池接口,typec等,提供多种电源供电方案2、输出接口3、自由拓展。

m0_61022809的博客 3213

A2B V1.0协议学习笔记(A2B System Specification V1.0)

A2B全称是 Automotive Audio Bus 汽车音频总线,主要是解决传统音频总线线多、线重、成本贵等问题。本文是以A2B V1.0规范为准,现在ADI又推出了A2B V2.0,物理层不兼容,采用了QPSK编码方式,后续有时间再更新。A2B总线的优点:支持1主多从的架构(最多10个子节点)支持50Mbps(具体是49.152 Mbps)的高带宽传输以及

qflook的博客 4424

Java爬虫(二)-- 页面解析神器Xpath的介绍及使用

XPath 是一门在 XML 文档中查找信息的语言,由于我们使用的一些爬虫解析工具基本都是可以把html页面转成xml格式的对象。加上webmagic本身支持使用Xpath抽取元素,所以使用Xpath进行解析十分的方便。 1、选取节点 表达式 描述 nodename 选取此节点的所有子节点。 / 从根节点选取(取子节点)。 // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(取子孙节点)。 . 选取当前节点。 … 选取当前节点的父节点。 @ 选取属性。 2

stalin_的博客 1458

链接文件及功能安全:S32K3如何将FLASH驱动放到RAM里面、RAM如何实现软件复位数据不丢失操作。

在通过RTD的SDK也好MCAL也好,始终存在一个问题,生成的代码除了看门狗模块,默认都是放在flash里面,按照正常逻辑来看没啥大的问题,思考一个问题:Flash放在0x100的位置,但是此时我们要操作0x100怎么办?那肯定不允许啊,但是将flash的驱动放在RAM里面就可以避免这个问题的产生。Flash的特性:PF0能操作PF1,当然PF1也能操作PF0的,以此类推,只要不操作自身,想怎么玩都可以。这也是一个物理特性吧。

梦想技术家 2310

如何自学Python爬虫?新手入门教程

如何自爬虫?在大家自学爬虫之前要解决两个常见的问题,一是爬虫到底是什么?二是问什么要用Python来做爬虫?爬虫其实就是自动抓取页面信息的网络机器人,至于用Python做爬虫的原因,当然还是为了方便。本文将为大家提供一份详细的新手入门教程,带大家从入门到精通Python爬虫技能。

WANGJUNAIJIAO的博客 468

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

万字博文教你python爬虫Beautiful Soup库【详解篇】

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~给大家准备的学习资料包括但不限于:Python 环境、pycharm编辑器/永久激活/翻译插件python 零基础视频教程Python 界面开发实战教程Python 爬虫实战教程Python 数据分析实战教程python 游戏开发实战教程Python 电子书100本。

m0_61549674的博客 388

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

google 浏览器安装xpath插件

今天自学Python遇到的一个问题,google添加Xpath插件,看了几次视频都没搞定,也查了几个人的方法 ,最后完美解决.借鉴下面这枚童鞋的方法,感谢!!! 完美解决办法在这里哟

weixin_45826228的博客 363

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

不会还有人找不到Python学习资料吧?

本人业余写python爬虫、python小工具已有两年有余了,在这里推荐一些学习时觉得比较好的视频教程、文章教程等,纯属个人建议,不喜勿喷 目录 资料篇 爬虫篇 数据分析篇 资料篇 自学最好的还是动手操作,想用什么找什么,有很多课程涉及到了Python语言程序设计、Python网络爬虫与信息提取、Python数据分析与展示、Python科学计算三维可视化等,可以说很全,其次视频推荐里面有文章介绍和视频介绍,别人偏向与文章介绍,这样更快更节省时间。 爬虫篇 介绍一下爬虫涉

wobuchixiangcain的博客 849

Selenium定位元素的方法css和xpath的区别

selenium是一种自动化测试工具,它可以通过不同的定位方式来识别网页上的元素,如id、name、class、tag、link text、partial link text、css和xpath。xpath还可以通过层级关系来定位,如//div[@id=‘china’]/p表示选择div元素下id为china的子元素下的所有p元素。xpath也可以通过标签和属性的组合来定位,如input[@id=‘kw’]表示选择input标签且id为kw的元素。

HUA1211的博客 192

如何自学Python爬虫?新手小白入门教程

如何自学Python爬虫?在大家自学爬虫之前要解决两个常见的问题,一是爬虫到底是什么?二是问什么要用Python来做爬虫?爬虫其实就是自动抓取页面信息的网络机器人,至于用Python做爬虫的原因,当然还是为了方便。本文将为大家提供一份详细的新手入门教程,带大家从入门到精通Python爬虫技能。 一、爬虫是什么? 网络爬虫又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者。它是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序。其

5197

Xpath Python 爬虫自学

Xpath 是Python中lxml包下用于解析待爬取网页路径的一种方法,相较于re的正则化表达以及bs4的解析方法,Xpath更加简洁易用,且通用性也较强。在Python中 pip install lxml,调用: from lxml import etree。1) 使用lxml.etree实例化一个etree对象,将解析到的网页源码text数据加载到该对象中。2) 调用etree对象中的xpath方法,利用xpath表达式实现标签定位以及内容获取。适合新手的Python数据爬虫课程,老师讲得清晰明了。

weixin_45944928的博客 377

python 安装xpath_[Python自学] 爬虫(4)xpath

一、xpath1.安装xpathpip install lxml2.简单使用获取根目录下的html标签对象:importrequestsfrom lxml importetreeres= requests.get("https://www.bilibili.com/")html= etree.HTML(res.content.decode('utf-8'))html_data= html.xpat...

weixin_39885690的博客 641

爬虫入门教程(一)———requests与xpath简介

前言: 本博客为python爬虫入门教程,学习需前初步了解python基本语法,http协议 一:requests requests最常用的两个方法,对应http协议的get和post requests.get(url) requests.post(url, datas = data) 获取html文本: requests.get(url).text 二:xpath 1.简介 用来解析网页,提取...

DXZ444的博客 1549

从零开始的 Python 爬虫速成指南_从零 爬虫一个网站,面试ng

在miao文件夹中创建一个items.py文件。此处我们定义了两个简单的class来描述我们爬取的结果。

zhuceyigecsdn的博客 1052

Xpath Helper(xpath辅助插件)

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

m0_67401228的博客 1628

【Python爬虫】数据解析之bs4解析和xpath解析_bs4 xpath

标签,都是一级标题,但是下面这个会显示在右边,也就是说,通过这种形式对。你也可以对代码进行改进,抓取多页数据,但个人建议不要将全部数据都抓取下来。其实不是,我们要抓取的是点击图片进入的页面的高清图片,也就是如下。这里是因为我的编译器设置了背景,图片效果不是特别好,还行。好的,有了这些基础知识后,我们就可以开始了解。的基本语法来进行使用,通过案例来学会使用。文档中对元素和属性进行遍历,而我们熟知的。中被称为标签的属性,并且属性可以有很多个。就是通过标签和属性去定位页面上的内容的。的一个子集,所以完全可以用。

2401_84160361的博客 1052
上一篇: MUI 万年历的前端实现
下一篇: jQuery 自学教程
高建伟-joe
博客等级 码龄6年 155粉丝 56原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高建伟-joe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值