一.什么是Json?
首先解释一下,什么是json?JSON:JavaScript 对象表示法(JavaScript Object Notation)。
JSON 是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。
里看完上边是不是懂了些什么东西?
不懂的话就直接上图了!
看了之后是不是还是有点不懂??
其实就是键值对存储信息的形式
Key:Value
这种形式,说白了有点像python里的dict差不多的东西。
一般的像小程序如果不想自己搭建网站就可以,就可以去apiStore申请一个api通过解析Json数据绑定到部件上去,我之前写的小程序就是通过请求api解析Json绑定数据实现的,如果有兴趣可以看一下:经纬我查查。
举一个小例子:
{
"name":"tom",
"age":"15",
"详细信息":[{"1":"aaa","2":"bbb"}]
}
二.解析Json
1.使用java解析json
之前用java写的一个android项目就是使用java发起请求,请求一个天气数据,之后对json数据进行解析,如果感兴趣可以去看一下。这里就不过多介绍java解析json。大全麦圈齁死你:Android天气查询页面设计zhuanlan.zhihu.com
直接看.java后缀的文件即可,Layout.xml是布局文件。
如果写安卓,想写个查询天气的页面可以直接套用。
2.使用python解析json
这地方就是重点了!!这里先简单的说一下loads的使用,之后有时间了将会写load dump loads dumps的详细使用。
这里需要加载json包
我先把这次实验的数据放在这
{"returnCode":"0","returnMessage":"Query Succeed","rowCount":"1","colCount":"3","requestParams":"datacode=SURF_CHN_MUL_HOR&staids=54823&timerange=[20190413140000,20190413140000]&elements=TEM,TEM_Max,TEM_Min","requestTime":"2019-04-13 14:39:01","responseTime":"2019-04-13 14:39:01","takeTime":"0.017","fieldNames":"温度/气温 最高气温 最低气温","fieldUnits":"摄氏度(℃) 摄氏度(℃) 摄氏度(℃)","DS":[{"TEM":"14.6000","TEM_Max":"15.4000","TEM_Min":"14.5000"}]}
比如说我们这次要获得returnMessage中的内容;
import json
data='{"returnCode":"0","returnMessage":"Query Succeed","rowCount":"1","colCount":"3","requestParams":"datacode=SURF_CHN_MUL_HOR&staids=54823&timerange=[20190412120000,20190412120000]&elements=TEM,TEM_Max,TEM_Min","requestTime":"2019-04-13 14:17:46","responseTime":"2019-04-13 14:17:46","takeTime":"0.016","fieldNames":"温度/气温 最高气温 最低气温","fieldUnits":"摄氏度(℃) 摄氏度(℃) 摄氏度(℃)","DS":[{"TEM":"14.7000","TEM_Max":"15.1000","TEM_Min":"14.7000"}]}'
jsonstr=json.loads(data)
print(jsonstr["returnMessage"])
运行之后的结果:
再比如我们要获得TMP:
因为这个是{{}}的形式,
代码如下:
import json
data='{"returnCode":"0","returnMessage":"Query Succeed","rowCount":"1","colCount":"3","requestParams":"datacode=SURF_CHN_MUL_HOR&staids=54823&timerange=[20190412120000,20190412120000]&elements=TEM,TEM_Max,TEM_Min","requestTime":"2019-04-13 14:17:46","responseTime":"2019-04-13 14:17:46","takeTime":"0.016","fieldNames":"温度/气温 最高气温 最低气温","fieldUnits":"摄氏度(℃) 摄氏度(℃) 摄氏度(℃)","DS":[{"TEM":"14.7000","TEM_Max":"15.1000","TEM_Min":"14.7000"}]}'
jsonstr=json.loads(data)
print(jsonstr["DS"][0]["TEM"])
结果如下:
是不是很简单?
学会上边提取json数据之后我们就可以通过接口将数据存储到本地了,可以将存储的数据进行数据分析之类。
例如下边通过构造url请求之后获得数据,获取数组中几个城市的最高温度
import json
import requests
city=["济南","北京","南京","西安","青岛","潍坊","济宁","菏泽"]
urls="https://www.apiopen.top/weatherApi?city="
url=[]
for i in range(0,len(city)):
url.append(urls+city[i])
res=requests.get(url[i])
res.encoding=res.apparent_encoding;
jsonstr=json.loads(res.text)
print(jsonstr["data"]["forecast"][0]["high"])
以上只是一个比较简单的案例,我使用的是构造url的方法,我们也可以使用队列存储url进行爬取。比较好用的队列任务库有:celery、huey、mrq、RQ、simpleq
提供一个思路,就是通过构造请求不断请求api,之后解析数据到excel中,也就是pythonIO就可以获得数据进行之后的数据分析。
pythonIO不会请看这里:
可以通过这种思路去获取大量数据进行分析。
剩下的就需要自己去探索咯!
嘿嘿最近文章写的有点少,因为大部分精力在写关于爬虫的东西,推一下自己建立的公众号吧!