一.什麼是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不會請看這裡:

zhuanlan.zhihu.com/p/54

可以通過這種思路去獲取大量數據進行分析。

剩下的就需要自己去探索咯!


推薦閱讀:
相關文章