1,什么是xml??
定义:可扩展标记性语言
特点:xml自描述结构–>半结构化数据
作用:设计宗旨传输数据–>可作为配置文件
二、xml和html的区别:
1,语法要求不同---->xml严格
html–>不区分大小写–>有时省却尾标签–>不带属性值–>属性可不加引号
xml–>区分大小写–>不能省却标签—>有自闭标签(无内容,只属性) –>必须带属性值–>属性必须引号
2,作用不同:
html -->设计宗旨–>显示数据 更好显示数据
xml–>设计宗旨–>传输数据
3,标记不同:
xml–>无固定标记
html–>标记固定 无自定义
1,什么是xpath?
xpath-->筛选页面元素的语法
2,xml|html名词—>元素、标签、属性、内容
3,xml和html的解析方法:
dom–>把xml文档变成dom树–>便于成型数据(树)–>处理xml文档–>文档大时–>出现问1耗内存–>问2解析速度会非常慢
sax–>当文档大时,dom无效率用–>满足事件驱动器–>解析器才会解析–>内存中加载的xml文档不会太大
4,xpath语法:
**(1)选取节点:**
nodename–>选取此标签及其所有字标签。
1、 /–>从根节点开始选取。
2、//–>从任意节点开始,不考虑他们的位置
3、//book–不管book位置,在xml中取出所有的book标签。
4、.–当前节点开始找
5、…–从父节点
6、@–选取属性
7、text()–选取内容
(2)谓语:起限定作用,限定它前面的内容
[]写在谁后面,就限定谁,一般用于限定元素或标签。//book[@class=‘abc’]
常见的谓语:
[@class]–选取class
[@class=‘abc’]–选取class属性为abc的节点
[contains(@href,‘baidu’)]–选取href属性包含baidu的标签[1]--选取第一个 [last()]--选取最后一个 [last()-1]--选取倒数第二 [position()>2]--跳过前两个。
(3)通配符
*--匹配任意节点 @*--匹配任意属性
(4)选取若干路径
| —左边和右边的xpath选的内容都要—and
5、lxml模块----python处理xml和html的模块。
(1)解析字符创类型xml。 from lxml import etree
text=’’’
html页面内容 ‘’’ tree = etree.HTML(text)—返回值就是一个element对象 #element对象有xpath方法,可以通过xpath表达式来筛选内容。
#选取class属性为item-1的li下面的a标签的内容 a_contents =
tree.xpath(’//li[@class=“item-1”]/a/text()’)
将element对象变成字符串的方法 # html_str = etree.tostring(tree,pretty_print=True).decode(‘utf-8’) #
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)