
本文主要围绕以xpath和lxml库进行展开:
一、xpath 概念、xpath节点、xpath语法、xpath轴、xpath运算符
二、lxml的安装、lxml的使用、lxml案例
一、xpath
1xpath概念
XPath 是一门在 XML 文档中查找信息的语言。XPath 使用路径表达式在 XML 文档中进行导航 。XPath 包含一个标准函数库 。XPath 是 XSLT 中的主要元素 。XPath 是一个 W3C 标准 。
2xpath节点
xpath有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。
节点关系:父、子、兄弟、先辈、后辈。
3xpath语法
xpath语法在W3c网站上有详细的介绍,这里截取部分知识,供大家学习。
XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。下面列出了最有用的路径表达式:
在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:
谓语用来查找某个特定的节点或者包含某个指定的值的节点。
谓语被嵌在方括号中。
在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:
XPath 通配符可用来选取未知的 XML 元素。
在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:
通过在路径表达式中使用"|"运算符,您可以选取若干个路径。
在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:
4xpath 轴
轴可定义相对于当前节点的节点集。
5xpath运算符
下面列出了可用在 XPath 表达式中的运算符:
好了,xpath的内容就这么多了。接下来我们要介绍一个神器lxml,他的速度很快,曾经一直是我使用beautifulsoup时最钟爱的解析器,没有之一,因为他的速度的确比其他的htmlparser 和html5lib快了许多。
二、lxml
1lxml安装
lxml 是一个xpath格式解析模块,安装很方便,直接pip install lxml 或者easy_install lxml即可。
2lxml 使用
lxml提供了两种解析网页的方式,一种是你解析自己写的离线网页时,另一种 则是解析线上网页。
导入包:
1解析离线网页:
2解析在线网页:
那么我们怎么获取这些标签和标签对应的属性值了,很简单,首先获取标签只需你这样做:
然后我们可以,比方说,你要获取a标签内的文本和它的属性href所对应的值,有两种方法,
1表达式内获取
2表达式外获取
这样就完成了获取,怎么样,是不是很简单了,哈哈哈。
下面再来lxml的解析规则:
3lxml案例
为了偷懒,我决定还是采用urllib那篇文章的代码,哈哈哈,机智如我。
之前写过相对父元素及下一个兄弟元素的方法。
这次补充一下xpath相对节点位置查找元素的所有方法。例子就不举了,自己可以去练练。
xpath相对节点查找方法:
1、xpath('/ancestor::')
查找当前节点的所有先辈节点,即父节点或祖父节点
2、xpath('/ancestor-or-self::')
查找当前节点的所有先辈节点以及本身
3、xpath('/attribute::')
获取当前节点的所有属性
4、xpath('/child::')
查找当前节点的所有子节点
5、xpath('/descendant::')
获取当前节点的所有后代节点,即子节点、孙节点
6、xpath('/following::')
获取当前节点结束标签后的所有节点
7、xpath('/following-sibing::')
获取当前节点的下一个兄弟节点
8、xpath('/parent::')
获取当前节点的父节点
9、xpath('/preceding::')
获取当前节点开始标签前的所有节点
10、xpath('/preceding-sibing::')
获取当前节点的上一个兄弟节点
11、xpath('/self::')
选取当前节点
大概也就这么多,这些方法非常实用,特别是有些元素通过自己的属性无法查找到的时候就需要通过相对节点的位置来查找。
正则表达式比较适合文本处理,用来分割文本,匹配文本中的模式,也可以对文本进行对换,替换字符等;XPath可用来获取标记语言如XML或HTML中指定元素或属性;beautifulsoup是一种网页解析库,是python的一种模块,并依赖于HTML或XML结构,其使用简单并直接解析查找这些结构,以获取想要的信息。
xPath 是一种html和xml的查询语言,能在其树状结构中寻找节点。
LXML安装:pip install lxml
——xPath使用-----------------------------------------------------------------------------------
获取文本:
//标签1[@属性1="属性值1"]/标签2[@属性2="属性值2"]//text()
获取属性值
//标签1[@属性1="属性值1"]/标签2[@属性2="属性值2"]//@属性n
eg:-------------------------------------------------------------------
from lxml import html
def parse():
"""将html文件中内容 使用xpath进行提取"""
#读取文件中的内容
f =open('/static/indexhtml', 'r', encoding='utf-8')
s = fread()
selector = htmlfromstring(s)
# 解析a 标签内容
a = selectorxpath('//div[@id="container"]/a/text()')
print(a[0])
# 解析href属性
alink = selectorxpath('//div[@id="container"]/a/@href')
print(alink[0])
fclose()
if __name__=='__main__':
parse()
以上就是关于Python解析库lxml与xpath用法总结全部的内容,包括:Python解析库lxml与xpath用法总结、通过xpath相对节点位置查找元素、正则表达式、 xpath和beautifulsoup有什么区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)