我的第二十六篇博客---json函数、jsonpath、xpath语法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
我的第⼆⼗六篇博客---json函数、jsonpath、xpath语法
json四个函数
json.loads() 把jsonstr转为python类型(dict)
json.load() 把⽂件转为python类型(dict)
json.dumps() 把python类型(dict)转成jsonstr类型
json.dump() 把python类型(dict)转为⽂件
将python类型写⼊⽂件
jsonA={'name':'张三','age':25}
import json
with open('student.json',mode='w',encoding='utf8') as f:
json.dump(jsonA,f,ensure_ascii=False) #ensure_ascii=False不让汉字转为ASCII
#f.write(jsonA) #不允许⽤普通⽂件的⽅式写⼊因为后缀是json
将json⽂件转为python类型
with open('student.json',mode='r') as f:
contentJson=json.load(f)
print(contentJson)
jsonpath.jsonpath(content,'筛选条件') content 是json类型
jsonpath⽤来解析多层嵌套的json数据;JsonPath是⼀种信息抽取类库,是从JSON⽂档中抽取制定信息的⼯具,提供多种语⾔实现版本Jsonpath对于json来说,相当于xpath对于xml
jsonpath语法:
jsonpath 描述
$ 根节点
@ 现⾏节点
. or [] 取⼦节点
.. 就是不管位置,选择所有符合条件的条件
* 匹配所有的元素节点
[] 迭代器标⽰(可以在⾥⾯做简单的迭代操作,如数组下标,根据内容选值等)
实例:
$.store.book[*].author store中的所有book作者
$..author 所有的作者
$.store.* store下的所有的元素
$.store..price store中所有的内容的价格
$..book[2] 第三本书
$..book[(@length-1)] | $..book[-1:] 最后⼀本书
$..book[0,1] | $..book[:2] 前两本书
$..book[?(@.isbn)] 获取有isbn的所有数
$..book[?(@.price<10)] 获取价格⼩于10的所有的书
$..* 获取所有的数据
数据提取之xpath
为什么要学习xpath和lxml
lxml是⼀款⾼性能的python HTML/XML 解析器,我们可以利⽤XPath,来快速定位特定元素以及获取节点信息
什么是xpath
xpath是⼀门在HTML/XML⽂档中查找信息的语⾔,可⽤来在HTML/XML⽂档中对元素和属性进⾏遍历
认识xml
知识点:
html和xml的区别
xml中各个元素的关系和属性
html和xml的区别
数据格式描述设计⽬标
xml 可扩展标记语⾔被设计为传输和存储数据,其焦点是数据的内容
html 超⽂本标记语⾔显⽰数据以及如何更好显⽰数据
xml的树结构
选取节点
xpath使⽤路径表达式来选取xml⽂档中的节点或者节点集,这些路径表达式和我们在常规的电脑⽂件系统中看到的表达式⾮常相似,使⽤chrome插件选择标签时候,选中时,选中的标签会添加属性class='xh-highlight'
下⾯列出了最有⽤的表达式:
表达式描述
nodename 选中该元素
/ 从根节点选取、或者是元素和元素之间的过渡(相当于jsonpath⾥的.)
// 从匹配选择的当前节点选择⽂档中的节点,⽽不考虑他们的位置(相当于jsonpath⾥的..)
. 选取当前节点
.. 选取当前节点的⽗节点
@ 选取属性
text() 选取⽂本
实例:
路径表达式结果
bookstore 选区bookstore元素
/bookstore 选取根元素bookstore.注释:假如路径起始于正斜杠(/).则此路径始终代表到某元素的绝对路径
bookstore/book 选取属于bookstore的⼦元素的所有Book元素
//book 选区所有book⼦元素,不管他们在⽂档中的位置
bookstore//book 选区属于bookstore元素的后代的所有book元素,⽽不管他们位于bookstore之下什么位置
//books/title/@lang 选择所有book下⾯的title中的lang属性的值
//book/title/text() 选择所有的book下⾯的title的⽂本
选择所有的h1下的⽂本
//h1/text()
获取所有a标签的href
//a/@href
获取html下的head下的title的⽂本
/html/head/title/text()
获取html下的head下的link标签的href
/html/head/link/@href
查找特定的节点
路径表达式结果
//title[@lang='eng'] 选择lang属性为eng的所有title元素
/bookstore/book[1] 选择属于bookstore⼦元素的第⼀个Book元素
/bookstore/book[last()] 选取属于bookstore⼦元素的最后⼀个book元素
/bookstore/book[last()-1] 选取属于bookstore⼦元素的倒数第⼆个book元素
/bookstore/book[position()>1] 选取bookstore下⾯的book元素,从第⼆个开始选择
//book/title[text()='Harry Potter'] 选择所有book下的title元素,仅仅选择⽂本为Harry Potter的title元素
/bookstore/book[pricce>35]/title 选择bookstore元素中的book元素的所有title元素,且期中的pirce元素的值必须⼤于35。