一、什么是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 --- 选取此标签及其所有字标签
/ --- 从根节点开始选取
// --- 从任意节点开始,不考虑他们的位置。
eg://book --- 不管book位置,在xml中取出所有的book标签。
. --- 当前节点开始找
.. --- 从父节点
@ --- 选取属性
text() --- 选取内容
(2)谓语:起限定的作用,限定他前面的内容。
[] 写在谁后面就限定谁,一般用于限定元素或者标签
eg://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
(3)通配符
* --- 匹配任意节点
@* --- 匹配任意属性
(4)选取若干路径
| ---左边和右边的xpath选的内容都要 ---and
5、lxml模块 --- python处理xml和html的模块
(1)解析字符串类型xml
eg: 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文件:
eg: from lxml import etree
#parse方法是按照xml的方式来解析,如果语法出问题,就会报错。
html = etree.parse('demo.html')
# print(html)#_ElementTree
li_texts = html.xpath('//li/a/text()')
print(li_texts)
python爬虫(xpath)
最新推荐文章于 2024-07-12 16:16:27 发布