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