栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Day26-Xpath数据解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Day26-Xpath数据解析

Day26-Xpath数据解析 1、xpath语法 01、什么是Xpath(xml path 语言) - 专门用来解析xml数据 不同的编程语言的程序如果想要进行数据交流,数据传输之前必须转换成通用的数据格式(常用的有两种:json、xml) Xpath解析数据的原理:通过提供你需要的标签在整个网页(xml)中的路径,来找到对应的标签,进一步获取标签内容或者标签属性。 python基于xpath做数据解析的工具:lxml第三方库 02、xml数据 - 一种通用的数据格式

xml数据是以标签(元素)为单位,通过标签内容或者标签属性来提供数据。

xml语法:<标签名 属性名1=属性值1 属性名2=属性值2 …>标签内容
案例:用json和xml来保存一个订单数据
json版本:
{
    "id": "oder028398923",
    "create_time": "2022-6-26 22:34:56",
    "pay_time": "2022-6-26 22:36:02",
    "goods_list":[
        {"goods_id": "9234233", "price": 123.00, "count": 2, "name": "XXX防晒霜"},
        {"goods_id": "7281911", "price": 32.00, "count": 1, "name": "拖鞋"}
    ]
}


    2022-6-26 22:34:56
    2022-6-26 22:36:02
    
        
            123.00
            2
            XXX防晒霜
        
            
        
            32.00
            1
            拖鞋
        
    

03、xpath常用术语 树: 树结构(一个网页源代码,一个xml数据本质就是一个树结构) 节点: 本质就是标签 根节点: 最外层的哪个标签 节点内容: 双标签标签内容 节点属性: 标签属性 04、xpath语法

from lxml import etree

1)基于html数据或xml数据创建html或者xml对应的树并且获取根节点 etree.HTML(网页源代码)、etree.XML(xml数据)

f = open(‘files/超市.xml’, encoding=‘utf-8’)
root = etree.XML(f.read())
f.close()

2)基于节点通过路径获取标签 节点对象.xpath(路径) - 根据路径获取对应的标签,返回值是一个列表,列表中的元素是对应的标签对象

路径写法:
1.绝对路径: /路径 (路径必须从根节点开始往后写)
2.相对路径:./路径 (.表示当前节点; 谁去点的xpath,当前节点就是谁)
…/路径 (…表示当前节点的上层节点)
注意:如果路径是以 ‘./’ 开始的,‘./’ 可以省略
3.任意路径://路径
注意:绝对路径和任意路径,在写路径和获取标签的时候跟xpath前面是哪个标签没有任何关系

# 绝对路径
result = root.xpath('/supermarket/name')
print(result)

result = root.xpath('/supermarket/staffs/staff')
print(result)

# 练习:通过写绝对路径,获取所有商品的商品名对应的标签
result = root.xpath('/supermarket/all_goods/goods/name')
print(result)

# 相对路径
all_goods = root.xpath('./all_goods')[0]

# result = all_goods.xpath('/supermarket/all_goods/goods/name')
# print(result)
result = all_goods.xpath('./goods/name')
print(result)

# 任意路径
result = root.xpath('//name')
print(result)

result = all_goods.xpath('//name')
print(result)
2、Xpath语法2
from lxml import etree

root = etree.XML(open('files/超市.xml', encoding='utf-8').read())

# 01. 获取标签内容和标签属性
# 1)获取标签内容:获取标签的路径/text()
result = root.xpath('//goods/name/text()')
print(result)       # ['泡面', '火腿肠', '矿泉水', '巧克力']

# 2)获取标签属性值:获取标签的路径/@属性名
result = root.xpath('//staff/@position')
print(result)
02、谓语(条件) 谓语的写法:[谓语] 1)位置相关谓语 [N] - 第N个标签(N是任意正整数) [last()] - 获取最后一个标签 [last()-1] - 获取倒数第2个标签。这儿的1可以是其他任意的整数 [position()>N]、 [position()>=N]、[position()esult = root.xpath('//goods[2]/name/text()') print(result) # ['火腿肠'] result = root.xpath('//goods[last()]/name/text()') print(result) # ['巧克力'] result = root.xpath('//goods[last()-1]/name/text()') print(result) # ['矿泉水'] result = root.xpath('//goods[position()<=3]/name/text()') print(result) # ['泡面', '火腿肠', '矿泉水'] 2)属性相关谓语 [@属性名=值] - 获取指定属性为指定值的标签 [@属性名] - 获取拥有指定属性的标签
result = root.xpath('//goods[@]/name/text()')
print(result)

result = root.xpath('//goods[@id="d1"]/name/text()')
print(result)


result = root.xpath('//goods[@class]/name/text()')
print(result)
*3)子标签内容相关谓语

[子标签名>值]、[子标签名>=值]、[子标签名<值]、[子标签名<=值]、[子标签名=值]

result = root.xpath('//goods[pirce=1.5]/name/text()')
print(result)
分支 - | 路径1|路径2 - 先通过路径1获取标签,如果获取不到再通过路径2获取(获取的是多个路径中第一个有效路径的结果)
result = root.xpath('//goods/name1/text()|//goods/name2/text()')
print(result)       # []

result = root.xpath('//goods/name2/text()|//goods/name/text()')
print(result)       # ['泡面', '火腿肠', '矿泉水', '巧克力']

result = root.xpath('//goods/name/text()|//staffs/staff/text()')
通配符 - * xpath中可以用*来代表任意标签或者任意属性
result = root.xpath('//goods/name/text()')
print(result)

result = root.xpath('//goods/*/text()')
print(result)       # ['泡面', '3.5', '120', '火腿肠', '1.5', '305', '矿泉水', '1.5', '1200', '巧克力', '11.5', '50']


result = root.xpath('//*[@]')
print(result)

# 所有第一个员工的所有属性值
result = root.xpath('//staff[1]/@*')
print(result)

# 获取属性值为c2的所有标签
result = root.xpath('//*[@*="c2"]')
print(result)

# 获取id值为'd1'的标签
result = root.xpath('//*[@id="d1"]')
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/996826.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号