Xpaht数据解析
XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。
XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。
因此,对 XPath 的理解是很多高级 XML 应用的基础。
xpath学习网址:https://www.w3school.com.cn/xpath/index.asp
XPath 开发工具
Chrome插件 XPath Helper

  • 环境安装

    • pip install lxml
  • 解析原理:html标签是以树状的形式进行展示
    • 1.实例化一个etree对象,且将待解析的页面源码数据加载到该对象中。
    • 2.调用etree对象的xpath方法结合着不同的xpath表达式实现标签的定位和数据提取
  • 实例化etree对象
    • etree.parse(‘filename’):将本地html文档加载到该对象中
    • etree.HTML(‘page_text’):网站获取的页面数据加载到该对象中
  • 标签定位:
    • xpath 语法中,整个HTML文档根节点用’/‘表示,如果我们想选择的是根节点下面的html节点,则可以在搜索框输入
/html

如果输入下面的表达式

/html/body/div

这个表达式表示选择html下面的body下面的div元素。

注意/有点像 CSS中的>, 表示直接子节点关系。

绝对路径选择
从根节点开始的,到某个节点,每层都依次写下来,每层之间用 / 分隔的表达式,就是某元素的 绝对路径

上面的xpath表达式/html/body/div,就是一个绝对路径的xpath表达式, 等价于 css表达式 html>body>div

相对路径选择
有的时候,我们需要选择网页中某个元素, 不管它在什么位置 。

比如,选择示例页面的所有标签名为 div的元素,如果使用css表达式,直接写一个 div就行了。

那xpath怎么实现同样的功能呢? xpath需要前面加// , 表示从当前节点往下寻找所有的后代元素,不管它在什么位置。

所以xpath表达式,应该这样写://div

//符号也可以继续加在后面,比如,要选择 所有的 div 元素里面的 所有的 p 元素 ,不管div 在什么位置,也不管p元素在div下面的什么位置,则可以这样写//div//p

如果,要选择 所有的 div 元素里面的 直接子节点 p , xpath,就应该这样写了//div/p
如果使用CSS选择器,则为 div > p

通配符
如果要选择所有div节点的所有直接子节点,可以使用表达式 //div/*

星号*是一个通配符,对应任意节点名的元素,等价于CSS选择器 div > *

根据属性选择

Xpath 可以根据属性来选择元素。

根据属性来选择元素 是通过 这种格式来的 [@属性名=‘属性值’]

注意:

属性名注意前面有个@

属性值一定要用引号, 可以是单引号,也可以是双引号

根据id属性选择

选择 id 为 west 的元素,可以这样 //*[@id='west']

根据class属性选择

选择所有 select 元素中 class为 single_choice 的元素,可以这样 //select[@class='single_choice']

如果一个元素class 有多个,比如

<p id="beijing" class='capital huge-city'>北京
</p>

如果要选 它, 对应的 xpath 就应该是//p[@class="capital huge-city"]

不能只写一个属性,像这样//p[@class="capital"]则不行

根据其他属性

同样的道理,我们也可以利用其它的属性选择

比如选择 具有multiple属性的所有页面元素 ,可以这样//*[@multiple]

属性值包含字符串

要选择 style属性值 包含 color 字符串的 页面元素 ,可以这样//*[contains(@style,'color')]

要选择 style属性值 以 color 字符串 开头 的 页面元素 ,可以这样 //*[starts-with(@style,'color')]

要选择 style属性值 以 某个 字符串 结尾 的 页面元素 ,大家可以推测是//*[ends-with(@style,'color')], 但是,很遗憾,这是xpath 2.0 的语法 ,目前浏览器都不支持

按次序选择
xpath也可以根据次序选择元素。 语法比css更简洁,直接在方括号中使用数字表示次序

比如
某类型 第几个 子元素

比如

要选择 p类型第2个的子元素,就是//p[2]
注意,选择的是 p类型第2个的子元素 , 不是 第2个子元素,并且是p类型 。
注意体会区别
再比如,要选取父元素为div 中的 p类型 第2个 子元素//div/p[2]

第几个子元素

也可以选择第2个子元素,不管是什么类型,采用通配符

比如 选择父元素为div的第2个子元素,不管是什么类型//div/*[2]
某类型 倒数第几个 子元素

当然也可以选取倒数第几个子元素

比如:

选取p类型倒数第1个子元素//p[last()]
选取p类型倒数第2个子元素//p[last()-1]
选择父元素为div中p类型倒数第3个子元素//div/p[last()-2]

范围选择

xpath还可以选择子元素的次序范围。

比如,

选取option类型第1到2个子元素//option[position()<=2]

或者

//option[position() < 3]

选择class属性为multi_choice的前3个子元素

//*[@class='multi_choice']/*[position()<=3]

选择class属性为multi_choice的后3个子元素

//*[@class='multi_choice']/*[position()>=last()-2]

为什么不是 last()-3 呢? 因为

last() 本身代表最后一个元素

last()-1 本身代表倒数第2个元素

last()-2 本身代表倒数第3个元素

组选择、父节点、兄弟节点

组选择

css有组选择,可以同时使用多个表达式,多个表达式选择的结果都是要选择的元素

css 组选择,表达式之间用 逗号 隔开

xpath也有组选择, 是用 竖线 隔开多个表达式

比如,要选所有的option元素 和所有的 h4 元素,可以使用

//option | //h4

等同于CSS选择器option , h4

再比如,要选所有的 class 为 single_choice 和 class 为 multi_choice 的元素,可以使用

//*[@class='single_choice'] | //*[@class='multi_choice']

等同于CSS选择器.single_choice , .multi_choice

选择父节点

xpath可以选择父节点, 这是css做不到的。

某个元素的父节点用/.. 表示

比如,要选择 id 为 china 的节点的父节点,可以这样写 //*[@id='china']/..

当某个元素没有特征可以直接选择,但是它有子节点有特征, 就可以采用这种方法,先选择子节点,再指定父节点。

还可以继续找上层父节点,比如 //*[@id='china']/../../..

兄弟节点选择

前面学过 css选择器,要选择某个节点的后续兄弟节点,用 波浪线

xpath也可以选择 后续 兄弟节点,用这样的语法 following-sibling::

比如,要选择 class 为 single_choice 的元素的所有后续兄弟节点 //*[@class='single_choice']/following-sibling::*
等同于CSS选择器 .single_choice ~ *

如果,要选择后续节点中的div节点, 就应该这样写//*[@class='single_choice']/following-sibling::div

xpath还可以选择 前面的 兄弟节点,用这样的语法preceding-sibling::

比如,要选择 class 为 single_choice 的元素的所有前面的兄弟节点//*[@class='single_choice']/preceding-sibling::*

05-xpath爬虫数据解析相关推荐

  1. python层级抓取_070.Python聚焦爬虫数据解析

    一 聚焦爬虫数据解析 1.1 基本介绍 聚焦爬虫的编码流程 指定url 基于requests模块发起请求 获取响应对象中的数据 数据解析 进行持久化存储 如何实现数据解析 三种数据解析方式 正则表达式 ...

  2. 爬虫数据解析的三方式

    2.爬虫数据解析的三方式 一.正则表达式解析 常用正则表达式回顾: 单字符:. : 除换行以外所有字符[] :[aoe] [a-w] 匹配集合中任意一个字符\d :数字 [0-9]\D : 非数字\w ...

  3. python爬虫数据解析总结

    python爬虫数据解析总结 目录 python爬虫数据解析总结 1.概述 2.Xpath解析html数据 2.1.基本语法 1.查询语法 2.2.Xpath解析html数据 1.安装lxml库 2. ...

  4. 2 爬虫 数据解析(bs4,XPath) robots协议 cookie反爬 代理反爬

    爬虫 1 数据解析 1.1 介绍 1.1.1 概念即作用 数据解析就是将一组数据中的局部数据进行提取,用于实现聚焦爬虫. 聚焦爬虫是建立在通用爬虫的基础上,从通用爬虫获取的整个源码数据中提取出指定的数 ...

  5. python爬虫数据解析xpath解析详细讲解——附有详细案例

    案例③由于时间流逝,网页爬取失效了 最近考研复试,增加一个案例,爬取985211学校,并以excel表格形式存储 文章目录 1.什么是xpath 是最常用的最广泛的数据解析方式 2.xpath解析原理 ...

  6. 爬虫数据解析的三种方式

    一.正则表达式解析 常用正则表达式回顾:单字符:. : 除换行以外所有字符[] :[aoe] [a-w] 匹配集合中任意一个字符\d :数字 [0-9]\D : 非数字\w :数字.字母.下划线.中文 ...

  7. python爬虫—数据解析

    1 requests库的深度应用 网页信息采集 import requestsif __name__=="__main__":url=""#将参数封装到字典中k ...

  8. python爬虫解析数据错误_Python网络爬虫数据解析的三种方式

    request实现数据爬取的流程: 指定url 基于request发起请求 获取响应的数据 数据解析 持久化存储 1.正则解析: 常用的正则回顾:https://www.cnblogs.com/wqz ...

  9. python爬虫循环表格xpath_python爬虫数据解析之xpath

    xpath是一门在xml文档中查找信息的语言.xpath可以用来在xml文档中对元素和属性进行遍历. 在xpath中,有7中类型的节点,元素,属性,文本,命名空间,处理指令,注释及根节点. 节点 首先 ...

最新文章

  1. WebLogic集群案例分析
  2. 三个打印函数printf()/sprintf()/snprintf()区别
  3. 电子设计竞赛电源题(2)-检波与采样
  4. [蓝桥杯][算法提高VIP]开灯游戏(dfs)
  5. WSDM 2022 | 点击率模型特征交叉方向的发展及CAN模型介绍
  6. jekenis父子结构项目打包_全栈之DevOps系列 - 发布 Python 项目 开源/私有 包
  7. Vue入门---- vue-router
  8. In App Purchases 入门
  9. 凯撒密码的实践使用-2--加密,解密的python代码事项
  10. 中秋海报设计素材|中秋节海报文案
  11. c语言 电阻器的分类,电阻器的分类与特点
  12. 基于python+pyqt5的串口助手
  13. 神经网络论文Enhancing deep neural networks via multiple kernel learning
  14. 编译过程 多个.c文件 . h文件 和main文件的 联系
  15. 用来在计算机各功能部件之间,广义相对论确认光在太阳附近会弯曲,引力透镜,水星进动等实验支持广义相对论。()...
  16. PBR之基于图像的光照IBL (Diffuse)
  17. 手把手教写拖拽布局插件(拖拽功能篇)
  18. 微信公众平台开发 账号快速申请
  19. lambda表达式无法抛出异常_Lambda 异常处理
  20. JAVA学习路线图 【黑马版】

热门文章

  1. JS百度地图高德地图API的接入与使用
  2. 为什么要importmodulepython_python – 为什么“import”这样实现?
  3. python爬虫scrapy安装_Python爬虫:Scrapy框架的安装和基本使用
  4. java mail urlname_javamail收发信件时,服务器,收发方的名称应该怎样设置才有效呢
  5. php 复制文件夹并压缩到最小_PHP压缩文件夹的方法
  6. ds18b20温度转换指令_【Proteus】DS18B20简易温控器
  7. java 消息传递示例_java actor模型和消息传递简单示例
  8. Hadoop学习(source方式安装篇)
  9. python内置数据结构_Python基础知识2-内置数据结构(下)
  10. html5如何划分区域,10.4 51单片机 RAM 区域的划分