Python的json库使用

什么是json

JSON(JavaScript Object Notation, JS 对象表示法) 是一种轻量级的数据交换格式。json独立于任何语言,具有自我描述性,更容易理解。相较于XML更小、更快、更易解析。

为什么要学json库

写爬虫时时常遇到一些情况,F12中看的到的内容用requests库请求到的却看不到,很有可能是使用了Ajax,即异步加载json和XML。
XML很容易,他与html格式相同,如同html使用你喜欢的库进一步解析提取有用信息即可,但json的格式不同,需要额外学习。
当然,无关爬虫,json作为一种数据存储格式也是一个不错的选择。
Python的数据格式和json的很像,但类型不一样,转换一下就可以很好的使用和存储。

json的格式化验证

从网页上获取到的json文件不是直接呈现给用户看的,但如果我们只获取了这么一个json,他是一行字符,没错就是一行,所以很难分清他们的嵌套关系。
短一点的可以用这个网站直接格式化,使用折迭一步一步定位到你所需要的信息。而长达十几万字符的,虽然也不是不行,但我更喜欢把他保存到本地json文件里用vscode看,也很方便在各个文件里切换,怎么选择看个人习惯吧。那么vscode的格式化则需要下载一个插件叫做JSON Tools,作者叫Erik Lynd。打开json文件,ctrl+alt+M即可格式化。

json库如何使用

import json

方法功能
json.dump(obj,fp)将python数据类型转换并保存的json格式的文件中
json.dumps(obj)将python数据类型转换为json格式的字符串
json.load(fp)从json格式的文件中读取数据并转换为python的类型
json.loads(s)将json格式的字符串转换为python的类型

实际使用

比如bilibili的评论区内容就是用的json格式,通过一些方法,我们拿到了某一视频第一页的内容的链接,https://api.bilibili.com/x/v2/reply?pn=1&type=1&oid=374193461,进一步requests.get()请求到。这是一大串文本,基本是些字典和列表相互嵌套。注意这已经是json格式的了,如果再次使用dump到本地格式化则会多出很多\,所以直接open一个json文件write下来即可
在这里插入图片描述
很容易看出这是一个字典嵌套数组,数组我没展开,里面又是一些字典,里面有各种各样的信息,用户名、UID(现在改叫MID了)、性别、个性签名、头像的src、评论内容等等,而我只需要评论内容,直接ctrl+F,得出他在data(dict)-replies(list)-content(dict)-message里,弄清楚他的结构就好办了,用json.loads()或者你用json.load()本地的json文件后,当作Python的数据结构来筛选就行
在这里插入图片描述
实际上bilibili的评论区比这复杂多了,翻页、楼中楼、楼中楼的翻页,更多的就不一一详解了。

接下来讲dump,假如你已经爬完所有的评论,想看看有没有评论有说到bgm是什么,那么直接终端ctrl+F搜关键词bgm就行甚至不用保存到本地,但如果你需要对筛选后的数据进一步处理还是保存到json文件里吧。
为什么不直接txt,,,虽然也可以进一步处理,但是,,,算了我都懒得码字赘述,只能说你喜欢怎么搞就怎么搞好了,你要是愿意存数据库都行。
一般的话,还是存一些k-y流的数据,就是字典嘛

json.dump(dict_title_url,open(path_json,'w',encoding='utf8'),ensure_ascii=False,indent=4)

解释一下,这行代码是我以前用过的

变量名解释
dict_title_url一个Python的字典,标题-网址的字典
path_json保存到本地的路径
‘w’只写
encoding=‘utf8’编码报错
ensure_ascii=False乱码问题
indent=4格式化
sort_keys=True没用到,是用来给key排序的,有插件不写也没事

至于json.dumps(),那我是真的不知道有啥用,本身就是Python的数据类型写出json给谁交互啊…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值