xpath和lxml库的使用、lxml语法语法案例
优采云 发布时间: 2021-03-28 01:15xpath和lxml库的使用、lxml语法语法案例
本文主要侧重于使用xpath和lxml库进行扩展:
一、 xpath概念,xpath节点,xpath语法,xpath轴,xpath运算符
二、 lxml安装,lxml使用,lxml案例
一、 xpath
1. xpath概念
XPath是用于在XML文档中查找信息的语言。 XPath使用路径表达式浏览XML文档。 XPath包括一个标准函数库。 XPath是XSLT中的主要元素。 XPath是W3C标准。
2. xpath节点
xpath具有七种类型的节点:元素,属性,文本,名称空间,处理指令,注释和文档(根)节点。
节点关系:父亲,儿子,兄弟,祖先,后代。
3. xpath语法
xpath语法在W3c 网站中有详细介绍,这是供所有人学习的知识的一部分。
XPath使用路径表达式来选择XML文档中的节点。通过遵循路径或步骤来选择节点。下面列出了最有用的路径表达式:
表达
说明
节点名
选择该节点的所有子节点。
/
从根节点中选择。
//
从当前节点中选择与选择匹配的节点,而不管它们的位置如何。
选择当前节点。
选择当前节点的父节点。
@
选择属性。
在下表中,我们列出了一些路径表达式及其结果:
路径表达式
结果
书店
选择bookstore元素的所有子节点。
/ bookstore
选择根元素书店。注意:如果路径以正斜杠(/)开头,则该路径始终表示元素的绝对路径!
书店/书
选择所有作为书店子元素的书元素。
// book
选择所有书籍子元素,无论它们在文档中的位置如何。
书店//书
选择所有作为bookstore元素后代的book元素,无论它们位于书店下的什么位置。
// @ lang
选择所有名为lang的属性。
谓词
谓词用于查找特定节点或收录指定值的节点。
该谓词嵌入方括号中。
在下表中,我们列出了一些带有谓词的路径表达式以及表达式的结果:
路径表达式
结果
/ bookstore / book [1]
选择作为书店子元素的第一本书元素。
/ bookstore / book [last()]
选择属于书店子元素的最后一本书元素。
/ bookstore / book [last()-1]
选择属于书店子元素的倒数第二本书元素。
/ bookstore / book [position()
选择作为bookstore元素的子元素的前两个book元素。
//标题[@lang]
选择所有具有lang属性的标题元素。
//标题[@ lang ='eng']
选择所有标题元素,这些元素具有lang属性,其值为eng。
/ bookstore / book [price> 3 5. 00]
选择bookstore元素中的所有book元素,并且price元素的值必须大于3 5. 00。
/ bookstore / book [price> 3 5. 00] /标题
在bookstore元素中选择book元素的所有title元素,并且price元素的值必须大于3 5. 00。
选择未知节点
XPath通配符可用于选择未知的XML元素。
通配符
说明
匹配任何元素节点。
@ *
匹配任何属性节点。
node()
匹配任何类型的节点。
在下表中,我们列出了一些路径表达式以及这些表达式的结果:
路径表达式
结果
/ bookstore / *
选择bookstore元素的所有子元素。
// *
选择文档中的所有元素。
//标题[@ *]
选择所有具有属性的标题元素。
选择几个路径
使用“ |”路径表达式中的运算符,可以选择多个路径。
在下表中,我们列出了一些路径表达式以及这些表达式的结果:
路径表达式
结果
///书/标题| // book / price
选择book元素的所有书名和价格元素。
//标题| //价格
选择文档中的所有标题和价格元素。
/书店/书/标题| //价格
选择属于bookstore元素的book元素的所有title元素以及文档中的所有price元素。
4. xpath轴
轴可以定义相对于当前节点的节点集。
轴名称
结果
祖先
选择当前节点的所有祖先(父母,祖父等)。
祖先或自我
选择当前节点的所有祖先(父母,祖父等)和当前节点本身。
属性
选择当前节点的所有属性。
孩子
选择当前节点的所有子元素。
后裔
选择当前节点的所有后代元素(子代,孙代等)。
后代或自我
选择当前节点和当前节点本身的所有后代元素(子代,孙代等)。
关注
选择文档中当前节点的结束标记之后的所有节点。
命名空间
选择当前节点的所有名称空间节点。
父母
选择当前节点的父节点。
之前
选择文档中当前节点的开始标记之前的所有节点。
同级兄弟
选择当前节点之前的所有相同级别的节点。
自我
选择当前节点。
5. xpath运算符
下面列出了可以在XPath表达式中使用的运算符:
操作员
说明
示例
返回值
计算两个节点集
//书| // cd
返回所有具有book和cd元素的节点集
+
添加
6 + 4
10
-
减法
6-4
2
乘法
6 * 4
24
div
部门
8 div 4
2
=
等于
price = 9. 80
如果价格为9. 80,则返回true。如果价格为9. 90,则返回false。
!=
不等于
price!= 9. 80
如果价格为9. 90,则返回true。如果价格为9. 80,则返回false。
少于
价格
如果价格为9. 00,则返回true。如果价格为9. 90,则返回false。
9. 80
如果价格为9. 90,则返回true。如果价格为9. 80,则返回false。
> =
大于或等于
price> = 9. 80
如果价格为9. 90,则返回true。如果价格为9. 70,则返回false。
或
或
price = 9. 80或price = 9. 70
如果价格为9. 80,则返回true。如果价格为9. 50,则返回false。
和
和
price> 9. 00和价格
如果价格为9. 80,则返回true。如果价格为8. 50,则返回false。
mod
计算除法的余数
5 mod 2
1
好吧,这就是xpath的全部内容。接下来,我们将介绍一个工件lxml,它非常快。使用beautifulsoup时,它曾经是我最喜欢的解析器。没有人,因为它的速度确实比其他html.parser和html5lib快。
二、 lxml
1. lxml安装
lxml是xpath格式的解析模块,安装非常方便,只需pip直接安装lxml或easy_install lxml。
2. lxml使用
lxml提供了两种解析网页的方法,一种是解析自己编写的脱机网页时,另一种是解析在线网页。
导入软件包:
从lxml导入etree
1.解析离线网页:
html = etree.parse('xx.html',etree.HTMLParser())
aa = html.xpath('// * [@ id =“ s_xmancard_news”] / div / div [2] / div / div [1] / h2 / a [1] / @ href')
print(aa)
2.分析在线网页:
从lxml导入etree
导入请求
rep = requests.get('')
html = etree.HTML(rep.text)
aa = html.xpath('// * [@ id =“ s_xmancard_news”] / div / div [2] / div / div [1] / h2 / a [1] / @ href')
print(aa)
那么我们如何获得这些标签以及与这些标签相对应的属性值?非常简单。首先,您只需要执行以下操作即可获取标签:
然后,例如,如果您要获取标签中的文本以及与其属性href对应的值,则可以采用两种方法,
1.深入表达
<p>aa = html.xpath('// * [@ id =“ s_xmancard_news”] / div / div [2] / div / div [1] / h2 / a [1] / text()')