一、xml是什么
1、定义:可扩展标记性语言
2、特点:xml的是具有自描述结构的半结构化数据。
3、作用:xml主要设计宗旨是用来传输数据的。他还可以作为配置文件。
二、xml和html的区别
1、语法要求不同:xml的语法要求更严格。
(1)html不区分大小写的,xml区分。
(2)html有时可以省却尾标签。xml不能省略任何标签,严格按照嵌套首位结构。
(3)只有xml中有自闭标签(没有内容的标签,只有属性。)<a class='abc'/>
(4)在html中属性名可以不带属性值。xml必须带属性值。
(5)在xml中属性必须用引号括起来,html中可以不加引号。
2、作用不同
html主要设计用来显示数据以及更好的显示数据。
xml主要设计宗旨就是用传输数据
3、标记不同:xml没有固定标记,html的标记都是固定的,不能自定义。
三、xpath
1、什么是xpath?
xpath是一种筛选html或者xml页面元素的【语法】
2、xml和html的一些名词
元素、标签、属性、内容
3、xml的两种解析方法
dom和sax
4、xpath语法
(1)选取节点
nodename --- 选取此标签及其所有字标签。
/----从根节点开始选取。
// ----从任意节点开始,不考虑他们的位置。
//book---不管book位置,在xml中取出所有的book标签。
.----当前节点开始找
..----从父节点
@ ---选取属性
text()---选取内容
(2)谓语:起限定的作用,限定他前面的内容。
[]写在谁的后面,就限定谁,一般用于限定元素或者标签。
//book[@class='abc']
常见的谓语:
[@class] ----选取有class
[@class='abc'] ---选取class属性为abc的节点。
[contains(@href,'baidu')] ---选取href属性包含baidu的标签
[1] ---选取第一个
[last()]---选取最后一个
[last()-1]---选取倒数第二
[position()>2]---跳过前两个。
book[price>30]
(3)通配符
* ---匹配任意节点
@* ---匹配任意属性
(4)选取若干路径
| ---左边和右边的xpath选的内容都要---and
5、lxml模块----python处理xml和html的模块。
(1)解析字符创类型xml
1 from lxml import etree
2 text='''
3 html页面内容
4 '''
5 tree = etree.HTML(text)---返回值就是一个element对象
6 #element对象有xpath方法,可以通过xpath表达式来筛选内容。
7 #选取class属性为item-1的li下面的a标签的内容
8 a_contents = tree.xpath('//li[@class="item-1"]/a/text()')
9
10 将element对象变成字符串的方法
11 # html_str = etree.tostring(tree,pretty_print=True).decode('utf-8')
12 # print(type(html_str))
#elment对象xpath放来筛选,返回值都是一个list。
#xpath表达式最后一个是一个元素(标签),list中都是elment元素
#xpath表达式最后一个是属性,list都是属性字符串
#xpath表达式最后一个是内容,list都是内容字符串
(2)解析xml或者html文件
from lxml import etree
#parse方法是按照xml的方式来解析,如果语法出问题,就会报错。
html = etree.parse('demo.html')
# print(html)#_ElementTree
li_texts = html.xpath('//li/a/text()')
print(li_texts)