xpath和python中的lxml模块

xpath和python中的lxml模块

一、xpath

1、什么是xpath

​ xpath是在HTML\XML文档中用来查找信息的语言,可以对HTML\XML中的元素进行遍历查找

2、xpath语法
(1)基本用法
表达式描述
nodename选中该元素
/从根节点选取、或者是元素和元素间的过度
//从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置。
.选取当前节点
选择当前节点的父节点
@选取属性
text()选取文本
(2)通配符的使用:
xpath通配符描述
*匹配任何元素节点
@*匹配任何属性节点
3、具体用法

​ 例:XML文档中数据如下

<bookstore>
    <book>
        <title lang="eng">Harry Potter</title>
        <price>29.99</price>
    </book>
    <book>
        <title lang="eng">Learning XML</title>
        <price>39.95</price>
    </book>
</bookstore>
路径表达式结果
bookstore选择bookstore元素
/bookstore选择bookstore元素,假如路径起始于正斜杠(/) 则此路径始终代表到某元素的绝对路径。
bookstore/book选择bookstored的子元素的所有book元素
//book选择所有book子元素,而不管他们在文档中的位置
bookstore//book选择属于bookstore元素的后代的所有book元素,而不管他们位于bookstore之下的什么位置。
//book/title/@lang选择所有的book下面的title中的lang属性的值
//book/title/text()选择所有的book下面的title的文本。
//title[@lang=‘eng’]选择lang属性值为eng的所有title元素
/bookstore/book[1]选择属于bookstore子元素的第一个book元素
/bookstore/book[last()]选择属于bookstore子元素最后一个book元素
/bookstore/book[last()-1]选择属于bookstore子元素的倒数第二个book元素
/bookstore/book[position()>1]选择bookstore下面的book元素,从第二个开始选择
//book/title[text()=‘Harry Potter’]选择所有book下的title元素,仅选择文本为Harry Potter的title元素
/bookstore/book[price>35.00]/title选择bookstore元素中book元素的所有title元素,且其中的price元素的值须大于35

注意:在xpath中,第一个元素的位置是1,最后一个元素位置是last( ),倒数第二个数是 last( ) - 1

二、lxml

1、什么是lxml

​ lxml库是python中对 HTML\XML 的一个解析器,可以通过转换在python中使用xpath语法进行数据查找

一般使用lxml进行数据请求,都会先对数据进行分组,再去遍历提取

2、lxml使用方法
(1) 导入 lxml 中的 etree 库
from lxml import etree
(2) etree.HTML()

​ 利用 etree.HTML 方法将字符串转化为Element对象,Element对象具有xpath方法,参数为bytes或str类型的数据,返回的数据类型为列表

# 把文件转换为Element对象,并赋给html
html = etree.HTML(text)
# 使用xpath筛选后,并返回筛选后的数据,保存到res_list中
res_list = html.xpath("xpath语法字符串")
  • html:通过 etree.HTML() 方法转换成了element对象

  • res_list:通过 element.xpath() 方法使用 xpath 语句取到了HTML\XML中需要的数据,并以列表的形式返回 (如果取到的是带标签的数据,则返回的列表中是element对象)

(3) etree.tostring()

把(2)中转换后的element对象转换成字符串,返回bytes类型的结果,可以通过 etree.tostring().decode() 进行转码

三、对xpath以及lxml的理解

  • 使用xpath或lxml都是为了在XML\HTML页面上获取数据,比使用正则表达式更加方便。
  • xpath的语法和jsonpath结构类似,使用方式和使用地方不同,需要取哪里的数据就使用哪种方法。
  • 如果某个请求的页面数据既不像json也不是HTML\XML,则使用正则表达式是最快的方式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值