python lxml与xpath
xpath介绍
-
基本概念
- XPath(XML Path Language)是一种XML的查询语言,他能在XML树状结构中寻找节点。XPath 用于在 XML 文档中通过元素和属性进行导航
- xml是一种标记语法的文本格式,xpath可以方便的定位xml中的元素和其中的属性值。lxml是python中的一个包,这个包中包含了将html文本转成xml对象,和对对象执行xpath的功能
-
节点关系
xml_content = ''' <bookstore> <book> <title lang='eng'>Harry Potter</title> <author>J K.Rowing</author> <year>2005</year> <price>29<price> </book> </bookstore> '''
-
上述文本节点关系
- <bookstore> (文档节点)
- <author>J k.Rowing</author>(元素节点)
- leng="en" (属性节点)
-
父(Parent) book元素时title、author、year、price元素的父
-
子(Children)title、author、year、price都是book元素的子
-
同胞(Sibling)title、author、year、price都是同胞
-
基本使用
-
表达式 描述 nodename 选取此节点的所有子节点 / 从根节点选取 // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置 . 选取当前节点 .. 选取当前节点的父节点 @ 选取属性 -
查找某个特定节点或者包含某个指定的值的节点
-
路径表达式 结果 /bookstore/book[1] 选取bookstore子元素的第一个book元素 /bookstore/book[last()] 选取bookstore子元素的最后一个book元素 /bookstore/book[last()-1] 选取bookstore子元素的倒数第二个book元素 /bookstore/book[position()<3] 选取最前面的两个 属于bookstore元素 的子元素为book元素 //title[@lang] 选取所有拥有名为lang的属性的title元素 //title[@lang='eng'] 选取所有title元素,且这些元素拥有值位eng的lang属性 bookstore/book[price>35.0] 选取bookstore元素的所有book元素,且其中的price元素的值需大于35.0 通配符 描述 * 匹配任何元素节点 @* 匹配任何属性节点 node() 匹配任何类型的节点 -
模块的使用
-
安装 pipi install lxml
wb_data = """ <div> <ul> <li class="item-0"><a href="link1.html">first item</a></li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-inactive"><a href="link3.html">third item</a></li> <li class="item-1"><a href="link4.html">fourth item</a></li> <li class="item-0"><a href="link5.html">fifth item</a> </ul> </div> """
-
使用
-
from lxml import etree
- etree的作用
- 第一个时将html字符串转化位element对象
- 第二个时element对象可以转换位字符串或者二进行制类型
# 导入包 import lxml import etree # 首先数据需要在网页源码中显示 def etree_use(web_source): # 使用etree处理原始网页数据 html_element = etree.HTML(web_source) # 节点与属性选择 data_element = html_element.xpath('//div[@class="xxx"]') # 通过节点和属性选择数据, # 节点 html body head div ul li p a 等 # 属性一般是<节点 属性>尖括号中的数据,@class @color # 选择节点中尖括号(<data>)的数据直接-->节点/@属性 # 选择节点<节点 属性>text</节点>完整的数据使用-->节点[@属性]/text()
-
-
-
网友评论