xpath

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

XPath 的选择功能十分强大,它提供了非常简洁的路径选择表达式,另外还提供了超过100个内置函数,用于字符串,数值,时间的匹配 以及节点和序列的处理

XPath 于1999年11月16日成为W3C标准 被设计为供XSLT、XPointer、以及其它XML解析软件使用

常用节点选择工具 Chrome插件 XPath Helper(下载crx扩展程序进行安装)

xpath工作原理就是通过对hmtl代码标签以及属性和css样式的抓取获取相应数据,所以要使用xpath必须做到对html代码了解。

常用规则

nodename 选取此节点的所有子节点

/ 从当前节点选取直接子节点

// 从当前节点选取子孙节点

. 选取当前节点

.. 选取当前节点的父节点

@ 选取属性

安装lxml

在终端

pipinstall lxml==4.5.0

实例

from lxml import etree #导入lxml的etree模块

text='''

  • first item
  • second item
  • third item
  • fourth item
  • fifth item

'''

html = etree.HTML(text)#调用HTML类,初始化构造一个XPath解析对象

print(html) #

result = etree.tostring(html) #将HTML对象转为字节数组

print(result.decode('utf-8')) #解码输出字符串

print('*'*50)

'''

也可以获取本地的文件进行解析

'''

html1 = etree.parse('a.html',parser=etree.HTMLParser())

print(html) #

result1 = etree.tostring(html1)

print(result1.decode('utf-8'))

a.html:

Title

  • first item
  • second item
  • third item
  • fourth item
  • fifth item

1.1所有节点

一般会用//开头的XPath规则来选取所有符合要求的节点

例如:

from lxml import etree

html = etree.parse('a.html',etree.HTMLParser())

result1 = html.xpath('//*') #查找所有节点

print(result1)

*代表匹配所有节点 返回一个列表 每个元素是Element类型 其后是节点名

1.2指定节点

result2 = html.xpath('//li') #查找li元素所有节点

将html文档中所有的li标签查找出来

1.3子节点

通过/或者// 查找元素子节点或子孙节点

例如: 查找li节点的所有直接子节点a

result3 = html.xpath('//li/a') #查找li标签下的子节点a

print(result3)

查找li节点下所有子孙节点a

result4 = html.xpath('//li//a') #li标签下的所有a节点

print(result4)

1.4父节点

查找href="link4.html"的a标签的父节点的class值

result5 = html.xpath('//a[@href="link4.html"]/../@class')

print(result5) # ['item-1']

也可以通过parent:: 获取其父节点

# 查找href="link4.html"的a标签的所有父节点的class值,parent::*表示所有父节点,*可以替换指定标签

result5 = html.xpath('//a[@href="link4.html"]/parent::*/@class')

print(result5) # ['item-1']

1.5属性过滤

选取class为item-0 的li节点

result6 = html.xpath('//li[@class="item-1"]')

print(result6)

1.6文本获取

用xpath中text()方法获取节点中的文本

获取li节点中的文本

获取指定li标签下a标签的文本

e1 = html.xpath('//li[@class="item-1"]/a/text()') #返回list,['second item', 'fourth item']

print(e1)

获取指定li标签下所有的文本

e2 = html.xpath('//li[@class="item-0"]//text()')

print(e2)#返回三个结果

获取p标签中的文本

e3 = html.xpath('//p/text()')

print(e3)

1.7属性获取

获取指定li标签下所有a标签的href属性值

e4 = html.xpath('//li[@class="item-1"]/a/@href')

print(e4)

1.8属性多值

当一个标签有多个属性值时,怎么查找。

使用contains()函数:

包含任意一个属性即可匹配

text='''

first item

'''

html = etree.HTML(text)

result = html.xpath('//li[contains(@class,"li")]/a/text()')

print(result)#返回结果是["first item"]

1.9多属性

有时需要匹配一个标签的多个属性时,采用运算符进行连接

text='''

first itemsecond item

'''

html = etree.HTML(text)

result = html.xpath('//li[contains(@class,"li") and @name="item"]/a/text()')

print(result) #返回结果是["first item"]

1.10常见运行算符

查找多个元素标签

查找p标签和li标签

e4 = html.xpath('//p|//li')

1.11按序选择

有时候选择某些属性 可能同时匹配了多个节点 但是想要其中某个节点

如 第一个节点或者最后一个节点

'''排序'''

# 第一个li元素

e7 = html.xpath('//li[1]/a/@href')

print(e7) #['link1.html']

#最后一个li元素

e8 = html.xpath('//li[last()]/a/@href')

print(e8) #['link5.html']

#前两个li元素

e9 = html.xpath('//li[position()<3]/a/@href')

print(e9) #['link1.html', 'link2.html']

#倒数第三个

e10 = html.xpath('//li[last()-2]/a/@href')

print(e10)

1.12 节点轴选择

xpath提供了很多节点轴选择方法 包括子元素,兄弟元素,父元素,祖先元素等

'''节点轴选择'''

from lxml import etree

text='''

  • 11first item
  • second item
  • third item
  • fourth item
  • fifth item

'''

html = etree.HTML(text)

result = html.xpath('//li[1]/ancestor::*')

print(result)# 获取第一个li所有祖先节点 包括html body div ul

result = html.xpath('//li[1]/ancestor::div')

print(result)#限定条件 div

result = html.xpath('//li[1]/attribute::*')

print(result)#获取所有属性值 返回li节点所有属性值

result = html.xpath('//li[1]/child::a[@href="link1.html"]')

print(result)#获取所有直接子节点 限定条件href = link1.html

result = html.xpath('//li[1]/descendant::span')

print(result)# 获取所有子孙节点 限定span节点 不包含a节点

result = html.xpath('//li[1]/following::*[2]/text()')

print(result)#获取当前节点之后的所有节点 虽然加了* 但又加了索引选择 只获取第二个后续节点

result = html.xpath('//li[1]/following-sibling::*')

print(result)#获取当前节点之后的所有同级节点

实战爬取百度校花吧

分析:

分析校花吧的url以及网页结构:

分析可得:我们要爬取的内容以及网页是分页显示的。

java爬虫工具xpath提取,2020-07-16--爬虫数据提取--xpath相关推荐

  1. java vue20.2.2浏览器_支持 Java 15!Java 开发工具 IntelliJ IDEA 2020.2发布

    本文主要对IntelliJ IDEA 2020.2新增修复功能进行详细介绍,其中包括对GitHub拉取请求的更高级支持,新的Inspections Widget,还包含许多框架和技术的新功能,包括Ja ...

  2. Java开发工具IntelliJ IDEA 2020.2完整授权流程

    2023 Java开发工具IntelliJ IDEA最新工具 最近几年,Java 的技术栈发展的非常快,Java作为一门十分流行的面向对象编程语言,其开发工具也是非常多的,当然因为接触时间长短以及个人 ...

  3. python xpath语法-XPath语法和lxml模块(数据提取)

    XPath语法和lxml模块 XPath lxml库 1.什么是XPath? XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素 ...

  4. 数据采集时总提示未登录_做电商必须学会这一招!教你用爬虫工具免费采集网易考拉商品数据...

    本文主要介绍如何使用后羿采集器的智能模式,免费采集网易考拉商品的价格.累计评价.商品图片等信息. 采集工具简介: 后羿采集器是一款基于人工智能技术的网络爬虫软件,只需要输入网址就能够自动识别网页数据, ...

  5. 安卓pkg解包工具_【降级,在安卓数据提取/取证方向上的应用】

    我们在取证方向上,所研究使用的数据提取技术有一部分都是利用安卓系统本身的系统漏洞实现的,不过随着手机系统版本更新对漏洞进行修补,新的版本无法再利用那些漏洞进行我们的取证工作,如果现有系统版本能够进行& ...

  6. python提取excel-Python操作Excel之数据提取

    最近发现excel数据量极大,并且通过简单的数据操作不能提取到我需要的数据,如果单独操作,数据量太大耗时太长. 想着通过简单的方式,并且快速提取数据,就想到了Python. python操作Excel ...

  7. 【2020/07/16修订】概率论与数理统计(电子科技大学) 知识梳理 · 第一版(1到8章 · 度盘)

    概率论与数理统计 知 识 梳 理 (第一版) 建议先修课程:高等数学(微积分) 配套课程: 1.慕课(MOOC):概率论与数理统计(电子科技大学) 2.教材:概率论与数理统计 电子科技大学应用数学学院 ...

  8. C# 网络爬虫+HtmlAgilityPack+Xpath+爬虫工具类的封装的使用

    目录 1 工具准备 2 思路准备 3 附加知识准备--XPath 简述 看看例子 用XPath来寻找标签 获取所有同名的标签 获取指定标签 一个实例 最后的补充 4 代码实现 5 爬虫工具类的封装 6 ...

  9. java爬取网页数据_如何使用爬虫工具采集数据

    网络爬虫是一种按照一定规则,自动抓取万维网数据的脚本.按照一定规则,指的是爬虫程序需要解析网页的dom结构,针对dom结构爬取自己感兴趣的数据. (图1) 这就是一个网页源码的dom结构,我们需要一级 ...

  10. 2020.07 学习日记

    废话 寒假到现在,在家里玩了5个月,来学校又玩了大半个月.以为会做点东西了就什么都懂了,竟然没做准备就投了字节秋招提前批.结果被挂了之后,又被捞起来面试.可以说十分幸运了,但机会都是留给有准备的人 2 ...

最新文章

  1. python response.json()报错_Django JsonResponse json格式报错 解决Django响应JsonResponse返回json格式数据报错问题...
  2. dell 如何给raid分区_什么是RAID技术?
  3. under what circumstances, breakfast is essential
  4. 机器学习 | 特征缩放
  5. MES主要功能模块介绍
  6. 如何在matplotlib中使用新罗马字体
  7. 计算机配置内存在哪看,从哪里看电脑配置
  8. 什么是安全漏洞扫描?
  9. 第十五周 项目三 归并排序算法的改进
  10. 李沐动手学深度学习V2-机器翻译和数据集
  11. iFunk翼超极本亲测心得
  12. VUE搭建云音乐播放器(App版本)
  13. 七层网络模型(大致信息讲解)
  14. highlight代码高亮
  15. 3 在浏览器中查看请求报文和响应报文
  16. OCC-7.6.0 + MFC单文档应用入门教程
  17. 【Flask】官方教程(Tutorial)-part2:蓝图-视图、模板、静态文件
  18. Windows安装pyserial
  19. 蚂蚁金服的to B开放
  20. leetcode|经典力扣第一题

热门文章

  1. 都说性能调优难?玩转这3款工具,让你秒变“老司机”!
  2. 使用Seq搭建免费的日志服务
  3. 博客系统知多少:揭秘那些不为人知的学问(四)
  4. 谈谈登录密码传输这件小事
  5. ABP框架使用拦截器动态配置租户过滤器
  6. Xamarin.Forms客户端第一版
  7. 中小企业团队敏捷产品开发流程最佳实践
  8. 如何备份和还原您的Kubernetes集群资源和持久卷?
  9. .NET Core 3.0 的新改进:针对分布式应用程序的故障诊断和监控
  10. 2019年了,C#发展的怎么样了呢?