第四章 XPATH提取数据

一、xml简介
1、定义

​ xml 即为可扩展标记语言。

2、特点

​ xml 是具有自描述结构的半结构化数据。

3、作用

​ xml 设计宗旨主要是用来传输数据,还可以作为了一些应用配置文件。

二、xml和html的区别
1、语法要求不同:xml 的语法要求更严格

​ (1)html不区分大小写
​ (2)html有时不严格,如果上下文清楚地显示出段落或者标签在何处结束,可以省略尾标签。但是xml不能 省略任何标签。
​ (3)只有xml中有自闭标签。—只能有属性,没有内容的标签。
​ (4)在html中属性名可以不带属性值,xml中必须带。
​ (5)在xml中属性必须用引号括起来,html可以不加引号

2、作用不同

​ xml主要用来传输数据,html主要用来显示数据。

3、标记不同

​ xml没有固定的标记,html的标签都是有特殊含义的,不能自定义。

三、xpath
1、什么是xpath

​ xpath是一种提取 xml 内容的语法,可用来在xml文档中对元素和属性进行遍历。

2、xml和html中的几个名词

​ 元素:一整个标签:标签的名字+属性+内容+后代标签

3、xpath的语法
(1)选取节点
表达式描述
nodename选取此标签及所有子标签
/从根节点开始找
//从任意位置开始找,不考虑他们的位置
**.*•当前节点
*••当前节点的父节点
@选取属性
text()选取内容
(2)谓语

​ 谓语的作用:限定

表达式描述
[]写在元素后面,就是用来限定这个元素的
[@class=“abc”]class属性为abc的元素
[@id = “aaa”]id属性为aaa的元素
[1]第一个元素
[last()]选后一个元素
[last()-1]倒数第二个元素
[position()>2]选取位置大于2的元素
book[positon()>2]从第三个book元素开始选取
[contains(属性名a,属性值b)]属性a包含b的标签
(3)通配符

​ •—任意元素

​ @*—任意属性

(4)选取若干路径

​ //title**|**//price —选取所有的title和price标签

四、lxml模块

​ python用来解析xml和html文档的模块。

1、安装

​ pip install lxml

2、使用lxml解析字符串
# 导入模块from lxml import etree
​	#解析字符串
​	text = """

	<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></li>
		</ul>
	</div>
​	"""#把字符串变成element对象
​	tree = etree.HTML(text)print(tree)  # <Element html at 0x3c62bc8>#把element对象变成字符串print(etree.tostring(tree,pretty_print=True).decode('utf-8'))

element对象可以调用xpath()方法来筛选内容,element.xpath()–>返回值是一个列表

	#选取标签内容
	a_text = tree.xpath('//a[@href="link1.html"]/text()')print(a_text)  # ['first item']     ##选取属性
​	a_href = tree.xpath('//ul/li[@class="item-inactive"]/a/@href')print(a_href)      # ['link3.html']

​ 如果选取的是元素,那么xpath方法返回的还是element,同样的这个element元素还是可以继续用xpath 方 法来筛选元素的。

	#选取元素#选取所有的li标签
​	li_list = tree.xpath('//ul/li')print(li_list)	#获取每一个li标签的a标签的内容for li in li_list:
​		text = tree.xpath('.//a/text()')print(text)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值