当前位置: 首页 > news >正文

json模块与jsonpath详解

数据提取之JSON与JsonPATH

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。

JSON和XML的比较可谓不相上下。

Python 2.7中自带了JSON模块,直接import json就可以使用了。

官方文档:http://docs.python.org/library/json.html

Json在线解析网站:http://www.json.cn/#

JSON

json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构

  1. 对象:对象在js中表示为{ }括起来的内容,数据结构为 { key:value, key:value, ... }的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象这几种。
  2. 数组:数组在js中是中括号[ ]括起来的内容,数据结构为 ["Python", "javascript", "C++", ...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

import json

json模块提供了四个功能:dumpsdumploadsload,用于字符串 和 python数据类型间进行转换。

1. json.loads()

作用:把json格式的字符串转为Python数据类型

# json_loads.pyimport jsonstrList = '[1, 2, 3, 4]'strDict = '{"city": "北京", "name": "大猫"}'json.loads(strList)
# [1, 2, 3, 4]json.loads(strDict) # json数据自动按Unicode存储
# {u'city': u'\u5317\u4eac', u'name': u'\u5927\u732b'}

2. json.dumps()

把 python 类型 转为 json 类型

import json# json.dumps()之前
item = {'name':'QQ','app_id':1}
print('before dumps',type(item)) # dict
# json.dumps之后
item = json.dumps(item)
print('after dumps',type(item)) # str

3. json.dump()

把python数据类型转为 json格式的字符串

注意:一般让你把抓取的数据保存为json文件时使用

# 示例1
import jsonitem = {'name':'QQ','app_id':1}
with open('小米.json','a') as f:json.dump(item,f,ensure_ascii=False)# 示例2
import jsonitem_list = []
for i in range(3):item = {'name':'QQ','id':i}item_list.append(item)with open('xiaomi.json','a') as f:json.dump(item_list,f,ensure_ascii=False)

4. json.load()

将json文件读取,并转为python类型

import jsonwith open('D:\\spider_test\\xiaomi.json','r') as f:data = json.load(f)print(data)

json模块总结

# 爬虫最常用
1、数据抓取 - json.loads(html)将响应内容由: json 转为 python
2、数据保存 - json.dump(item_list,f,ensure_ascii=False)将抓取的数据保存到本地 json文件# 抓取数据一般处理方式
1、txt文件
2、csv文件
3、json文件
4、MySQL数据库
5、MongoDB数据库
6、Redis数据库

JsonPath(了解)

JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。

JsonPath 对于 JSON 来说,相当于 XPATH 对于 XML。

下载地址:https://pypi.python.org/pypi/jsonpath

安装方法:点击Download URL链接下载jsonpath,解压之后执行python setup.py install

官方文档:http://goessner.net/articles/JsonPath

JsonPath与XPath语法对比:

Json结构清晰,可读性高,复杂度低,非常容易匹配,下表中对应了XPath的用法。

XPathJSONPath描述
/$根节点
.@现行节点
/.or[]取子节点
..n/a取父节点,Jsonpath未支持
//..就是不管位置,选择所有符合条件的条件
**匹配所有元素节点
@n/a根据属性访问,Json不支持,因为Json是个Key-value递归结构,不需要。
[][]迭代器标示(可以在里边做简单的迭代操作,如数组下标,根据内容选值等)
|[,]支持迭代器中做多选。
[]?()支持过滤操作.
n/a()支持表达式计算
()n/a分组,JsonPath不支持

示例:

我们以拉勾网城市JSON文件 http://www.lagou.com/lbs/getAllCitySearchLabels.json 为例,获取所有城市。

# jsonpath_lagou.pyimport requests
import jsonpath
import json
import chardeturl = 'http://www.lagou.com/lbs/getAllCitySearchLabels.json'
response = equests.get(url)
html = response.text# 把json格式字符串转换成python对象
jsonobj = json.loads(html)# 从根节点开始,匹配name节点
citylist = jsonpath.jsonpath(jsonobj,'$..name')print (citylist)
print (type(citylist))
fp = open('city.json','w')content = json.dumps(citylist, ensure_ascii=False)
print (content)fp.write(content.encode('utf-8'))
fp.close()
http://www.lryc.cn/news/261330.html

相关文章:

  • ubuntu20.04在noetic下编译orbslam2
  • 64. 最小路径和
  • 惰性加载函数(js的问题)
  • jmeter,读取CSV文件数据的循环控制
  • 移植LVGL到像素屏,从此玩转像素屏0门槛
  • stateflow 之图函数、simulink函数和matlab函数使用及案例分析
  • C# 加载本地文件设置应用程序图标
  • 苹果计划将全球1/4的IPhone产能转移至印度
  • el-date-picker 选择一个或多个日期
  • 5个创建在线帮助文档的好方法!
  • 听GPT 讲Rust源代码--src/tools(14)
  • arcgis api for js 中使用API的代理页面(跨越配置)
  • Unity_FairyGUI发布导入Unity编辑器资源报错
  • 1.5【应用开发】缓冲区(二)
  • RTMP流设置超时时间失败
  • 如何一步步让MySQL支撑亿级流量
  • MFC CLXHHandleEngine动态库-自定义设置对话框使用
  • Python生成器(Generator)(继续更新...)
  • Spring Boot 3 整合 Mybatis-Plus 动态数据源实现多数据源切换
  • 快速学习C++中的模板
  • Pandas-DataFtame的索引与切片(第3讲)
  • MySQL低版本中:字符串中的数字、英文字符、汉字提取
  • 多窗口文件管理工具Q-Dir安装以及使用教程
  • Spring入门
  • Linux——进程创建与进程终止
  • 轻量封装WebGPU渲染系统示例<50>- Json数据描述材质等场景信息
  • AtCoder ABC周赛2023 12/10 (Sun) D题题解
  • 基于C/C++的rapidxml加载xml大文件 - 上部分翻译
  • 小程序使用Nodejs作为服务端,Nodejs与与MYSQL数据库相连
  • 深度解读 Cascades 查询优化器