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中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构
- 对象:对象在js中表示为
{ }括起来的内容,数据结构为{ key:value, key:value, ... }的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象这几种。- 数组:数组在js中是中括号
[ ]括起来的内容,数据结构为["Python", "javascript", "C++", ...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。
import json
json模块提供了四个功能:dumps、dump、loads、load,用于字符串 和 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的用法。
| XPath | JSONPath | 描述 |
|---|---|---|
/ | $ | 根节点 |
. | @ | 现行节点 |
/ | .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()
相关文章:
json模块与jsonpath详解
数据提取之JSON与JsonPATH JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。 JSON和XML的比较可谓不…...
ubuntu20.04在noetic下编译orbslam2
ubuntu20.04在noetic下编译orbslam2 参考链接1:https://blog.csdn.net/qq_58869016/article/details/128660588 参考链接2:https://blog.csdn.net/dong123456789e/article/details/129693837 在noetic下的安装环境 1.库安装 sudo apt-get update sudo …...
64. 最小路径和
最小路径和 描述 : 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 题目 : LeetCode 64.最小路径和 64. 最小路径和 解析 : class So…...
惰性加载函数(js的问题)
在web开发中,因为浏览器之间的实现差异,一些嗅探工作总是不可避免。 var addEvent function( elem, type, handler ){if ( window.addEventListener ){return elem.addEventListener( type, handler, false );}if ( window.attachEvent ){return elem.…...
jmeter,读取CSV文件数据的循环控制
1、构造csv数据 保存文件时需要注意文件的编码格式 id,name,limit,status,address,start_time 100,小米100,1000,1,某某会展中心101,2023/8/20 14:20 101,小米101,1001,1,某某会展中心102,2023/8/21 14:20 2、在线程组下添加【CSV数据文件设置】元件 3、CSV文件数据的循环控…...
移植LVGL到像素屏,从此玩转像素屏0门槛
硬件方面 先上渲染图 实物图 配置 主控:esp32 micro32 plus主频:240MhzFlash:8MPSRAM:2M 软件方面 众所周知,LVGL是一个十分优秀的图形框架,小到几百kb的单片机,大到Linux都可以运行。既然它…...
stateflow 之图函数、simulink函数和matlab函数使用及案例分析
目录 前言 1. 图函数graph function 2.simulink function 3.matlab function 4.调用stateflow中的几种函数方式 前言 对于stateflow实际上可以做simulink和matlab的所有任务,可以有matlab的m语言,也可以有simulink的模块,关于几种函数在…...
C# 加载本地文件设置应用程序图标
static class Program{[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Form mainForm new Form1();mainForm.Show();//IntPtr hProcess Process.GetCurrentProcess().MainWindowHandle;// 设置应用程…...
苹果计划将全球1/4的IPhone产能转移至印度
KlipC报道:据相关人士报道,苹果希望在未来2到3年内每年在印度生产超过5000万部iphone,要是该计划得以实现,印度将占领全球iPhone产量的四分之一。 KlipC的分析师Alex Su表示:“此次iPhone15推出是苹果印度制造计划的一…...
el-date-picker 选择一个或多个日期
el-date-picker可选择多个日期 type“dates” 加个s即可 <div><span>el-date-picker选择多个日期</span><el-date-pickertype"dates"v-model"dateList"placeholder"选择一个或多个日期"></el-date-picker></di…...
5个创建在线帮助文档的好方法!
在线帮助文档是企业为用户提供支持服务的重要工具,它能够帮助用户更好地了解和使用产品,提高用户体验。然而,创建一份优秀的在线帮助文档需要掌握一定的技巧和方法。接下来就介绍一下创建在线帮助文档的5个好方法,帮助企业更好地为…...
听GPT 讲Rust源代码--src/tools(14)
File: rust/src/tools/rust-analyzer/crates/cfg/src/lib.rs 在Rust源代码中,rust/src/tools/rust-analyzer/crates/cfg/src/lib.rs这个文件是Rust语言分析器(Rust Analyzer)的一部分,用于处理和管理条件编译指令(Cond…...
arcgis api for js 中使用API的代理页面(跨越配置)
以下仅作为自己阅读官网api的对reques的理解做的备忘笔记。一知半解,仅供参考。 1、获取或者构建第三方代理 官网解释:代理在其自己的 Web 服务器上安装并运行,而不是在 Esri 服务器或安装了 ArcGIS Enterprise 的计算机上安装和运行&#…...
Unity_FairyGUI发布导入Unity编辑器资源报错
Unity_FairyGUI发布导入Unity编辑器资源报错 报错: FairyGUI: settings for Assets/UI/XMUI/XMSubway_atlas0.png is wrong! Correct values are: (Generate Mip Mapsunchecked) UnityEngine.Debug:LogWarning (object) FairyGUI.UIPackage:LoadAtlas (FairyGUI.P…...
1.5【应用开发】缓冲区(二)
二,附加缓冲区 你可以通过分别调用以下函数来附加一个缓冲区(screen_buffer_t类型),以将其与像素图、流或窗口相关联: screen_attach_pixmap_buffer() //用于附加像素图缓冲区 screen_attach_stream_buffers()//用于附加流缓冲区 screen_attach_window_buffers()屏幕附加…...
RTMP流设置超时时间失败
使用FFmpeg(版本是5.0.3)将rtmp流作为输入,设置超时时间(使用-timeout参数),结果报错:Cannot open Connection tcp://XXX:1935?listen&listen_timeout 通过./ffmpeg -help full 命令查看FFmpeg帮助&am…...
如何一步步让MySQL支撑亿级流量
1 主从读写分离 大部分互联网业务都是读多写少,因此优先考虑DB如何支撑更高查询数,首先就需要区分读、写流量,这才方便针对读流量单独扩展,即主从读写分离。 若前端流量突增导致从库负载过高,DBA会优先做个从库扩容上去…...
MFC CLXHHandleEngine动态库-自定义设置对话框使用
实现的效果如下所示: void CSampleDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 CSgxMemDialog dlg(180, 100); dlg.SetEnable(true); dlg.SetWindowTitle(_T("自定义对话框")); dlg.AddStatic(1000, //控件资源…...
Python生成器(Generator)(继续更新...)
学习网页: Welcome to Python.orghttps://www.python.org/https://www.python.org/ Python生成器 生成器(Generator)是 Python 的一种特殊类型的迭代器。生成器允许你创建自己的数据流,每次从数据流中获取一个元素,…...
Spring Boot 3 整合 Mybatis-Plus 动态数据源实现多数据源切换
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…...
玩转CANoe CAN IG:除了手动发送,这些高级信号发生器功能你用过吗?
玩转CANoe CAN IG:解锁信号发生器的隐藏潜力 在汽车电子测试领域,CANoe的CAN IG模块早已成为工程师们的标准工具。但大多数用户仅仅停留在手动发送固定信号的层面,却忽略了内置信号发生器这一强大功能。想象一下,当我们需要模拟真…...
能做10年以上的产品经理,都选了这几个赛道
“5年换了3个行业,简历石沉大海;5年深耕一个领域,薪资翻3倍被疯抢。” 这是目前产品经理就业市场最真实的写照。 在产品经理刚刚兴起的“黄金十年”,市场缺的是会画原型、懂点交互的“万金油”。只要你会写PRD,似乎就能…...
shadcn-ui-expansions Infinite Scroll 实现原理:构建高性能无限滚动列表的完整指南
shadcn-ui-expansions Infinite Scroll 实现原理:构建高性能无限滚动列表的完整指南 【免费下载链接】shadcn-ui-expansions More components built on top of shadcn-ui. 项目地址: https://gitcode.com/gh_mirrors/sh/shadcn-ui-expansions shadcn-ui-expa…...
sklearn交叉验证提速秘籍:除了n_jobs=-1,cross_val_score里pre_dispatch和verbose怎么用?
sklearn交叉验证提速实战:参数调优与资源管理技巧 当数据集规模膨胀或模型复杂度攀升时,交叉验证可能从几分钟的等待变成数小时的煎熬。许多工程师习惯性设置n_jobs-1后便放任不管,直到内存溢出或日志淹没控制台才手忙脚乱。本文将揭示cross_…...
YOLO11涨点优化:训练技巧 | 基于EMA(指数滑动平均)与SWA(随机权重平均)双保险,刷榜最后一公里必备
写在前面 在目标检测竞赛和工业落地中,有一个令人头疼的现象:模型在COCO预训练权重上表现惊艳,但迁移到自己的数据集后,精度长期“趴窝”——涨不上去,也掉不下来。投入大量资源调参、改结构、加数据增强,mAP就是纹丝不动。这种“不涨点”现象已经成为许多算法工程师在冲…...
英文论文AI率从97%降至8%:6款工具横测,这款神器绝不打乱排版!
前阵子我文章有两页的英文检测ai率居然冲到了97% 。我当时也是整个人都傻了。 作为一名每天和各种内容辅助工具打交道的博主,我太理解大家面对那张通红的检测报告时的心情。 既然大家都面临英文降ai这个难题,今天咱们就抛开那些虚头巴脑的理论…...
建议科技部与教育部聘请耿同学做学术打假工作
目前,学术界和社会公众正在热议的有一个核心话题:学术打假。“耿同学”(B站科普博主“耿同学讲故事”)近期在学术打假领域的表现确实堪称“降维打击”。作为一名退学博士,他仅凭个人力量和一些开源AI工具,在…...
Tauri + Next.js 桌面应用开发:从架构到部署的完整实践指南
1. 项目概述:一个现代桌面应用开发的“瑞士军刀” 最近在折腾一个桌面端的小工具,需要把Web前端那套东西打包成一个独立的桌面应用。一开始想着用Electron,毕竟生态成熟,但一想到那动辄上百兆的安装包和不算低的内存占用…...
增材制造如何破解光电子小批量定制化制造难题
1. 项目概述:一份被“雪藏”的产业复兴蓝图最近在整理行业资料时,我翻到了一篇2012年《EE Times》的老文章,标题叫《Seeing the light on optoelectronics manufacturing》。文章的核心观点很有意思,它批评了当时美国国家研究委员…...
AI圈内两大热词 Agent 和 Skill,一文彻底搞懂它们之间的区别与联系!
本文以餐厅经理和厨师的类比,解释了 Agent 和 Skill 的核心区别:Agent 拥有决策权,决定下一步做什么;Skill 则负责执行具体任务。文章指出,尽管在实际应用中两者界限逐渐模糊,但在构建 AI 系统时࿰…...
