最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 調(diào)用API接口 獲取和解析 Json數(shù)據(jù)

 更新時(shí)間:2020年09月28日 11:53:12   作者:蝦米堡  
這篇文章主要介紹了python 如何調(diào)用API接口 獲取和解析 Json數(shù)據(jù),幫助大家更好的理解和使用python,感興趣的朋友可以了解下

任務(wù)背景:

調(diào)用API接口數(shù)據(jù),抽取我們所需類型的數(shù)據(jù),并寫入指定mysql數(shù)據(jù)庫。

先從宏觀上看這個(gè)任務(wù),并對(duì)任務(wù)進(jìn)行分解:

step1:需要學(xué)習(xí)python下的通過url讀取數(shù)據(jù)的方式;

step2:數(shù)據(jù)解析,也是核心部分,數(shù)據(jù)格式從python角度去理解,是字典?列表?還是各種嵌套?

step3:連接mysql數(shù)據(jù)庫,將數(shù)據(jù)寫入。

從功能上看,該數(shù)據(jù)獲取程序可以分為3個(gè)方法,即step1對(duì)應(yīng)方法request_data(),step2對(duì)應(yīng)方法parse_data(),step3對(duì)應(yīng)data_to_db()。

第一輪,暫不考慮異常,只考慮正常狀態(tài)下的功能實(shí)現(xiàn)。

1、先看request_data():

 import requests
 def request_data(url): 
 req = requests.get(url, timeout=30) # 請(qǐng)求連接
 req_jason = req.json() # 獲取數(shù)據(jù)
 return req_jason 

入?yún)ⅲ簎rl地址;return:獲取到的數(shù)據(jù)。

2、然后看parse_data():

不同的API接口下的數(shù)據(jù)格式各不相同,需要先理清,打開之后密密麻麻一大串,有的可能連完整的一輪數(shù)據(jù)間隔在哪都不知道,這時(shí)候可以巧用符號(hào){ [ , ] }輔助判斷。

梳理之后,發(fā)現(xiàn)本接口下的數(shù)據(jù)格式為,最外層為字典,我們所需的數(shù)據(jù)在第一個(gè)key“data”下,data對(duì)應(yīng)的value為列表,列表中的每個(gè)元素為字典,字典中的部分鍵值

即為我們需要的內(nèi)容。這樣,就明確了我們的數(shù)據(jù)結(jié)構(gòu)為字典套列表,列表再套字典的格式,最后一層的字典還存在一鍵多值(比如“weather”)的情況。

當(dāng)然,還有懶人方法,就是百度json在線解析格式化。

摘取部分?jǐn)?shù)據(jù)如下:{"data":[{"timestamp_utc":"2020-08-31T08:00:00","weather":{"icon":"c02d","code":802,
wind_dir":336,"clouds_hi":0,"precip":0.0625},{"timestamp_utc":"2020-08-31T08:00:00","weather":{"icon":"c02d","code":802,},
wind_dir":336,"clouds_hi":0,"precip":0.0625],"city_name":"Dianbu","lon":117.58,"timezone":"Asia\/Shanghai","lat":31.95,"country_code":"CN"}

def parse_data(req_jason):
 data_trunk = req_jason['data']# 獲取data鍵值下的列表
 time_now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") #獲取當(dāng)前時(shí)刻
 for i in range(len(data_trunk)):
  data_unit = data_trunk[i] # 依次獲取列表下第i個(gè)元素即字典
  del data_unit['weather'] # 刪除該字典中不需要的一鍵多值的key和value,不刪除的話會(huì)影響后續(xù)的dataframe轉(zhuǎn)換,但是,如果該鍵值需要的話,需要采取其他處理方式
  df = pd.DataFrame([data_unit]) # 將刪除鍵值后的字典轉(zhuǎn)為datafrme
  list_need = ['timestamp_utc', 'wind_dir', 'precip','clouds_hi'] # 列出我們需要的列
  df_need = df[list_need] # 保留df中需要的列  10  df_need.insert(0, 'update_time', time_now) #表格中還需額外增加獲取數(shù)據(jù)的當(dāng)前時(shí)間,并且需要放在dataframe的第一列

備注:數(shù)據(jù)插入數(shù)據(jù)庫,有兩種方式,一種是采用insert的sql語句,采用字典的形式插入,另一種是采用dataframe的方式,采用pandas中的to_sql方法。本案例選擇了后者,所以在數(shù)據(jù)解析時(shí),將字典數(shù)據(jù)轉(zhuǎn)成dataframe格式。

入?yún)ⅲ韩@取到的數(shù)據(jù);return值:無

運(yùn)行以后,發(fā)現(xiàn)這樣的程序存在一些問題:就是這個(gè)for循環(huán)括起來的過多,導(dǎo)致寫數(shù)據(jù)庫時(shí)是一條條寫入而不是一整塊寫入,會(huì)影響程序效率,所以需要對(duì)程序進(jìn)行如下修改:

def parse_data(req_jason):
 data_trunk = req_jason['data']# 獲取data鍵值下的列表
 time_now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") #獲取當(dāng)前時(shí)刻
 for i in range(len(data_trunk)):
  data_unit = data_trunk[i] # 依次獲取列表下第i個(gè)元素即字典
  del data_unit['weather'] # 刪除該字典中不需要的一鍵多值的key和value,不刪除的話會(huì)影響后續(xù)的dataframe轉(zhuǎn)換,但是,如果該鍵值需要的話,需要采取其他處理方式
 df = pd.DataFrame(data_trunk) # 將刪除鍵值后的整個(gè)列表套字典轉(zhuǎn)為datafrme
 list_need = ['timestamp_utc', 'wind_dir', 'precip','clouds_hi'] # 列出我們需要的列
 df_need = df[list_need] # 保留df中需要的列
 df_need.insert(0, 'update_time', time_now) #表格中還需額外增加獲取數(shù)據(jù)的當(dāng)前時(shí)間,并且需要放在dataframe的第一列

也就是從第7行之后跳出循環(huán);

如果覺得for循環(huán)影響整體美觀,也可以用map代替,將代碼第4/5/6行改為如下代碼,不過性能上來說可能還是for循環(huán)更好,具體對(duì)比可看其他博主的測(cè)試,或者自己測(cè)試下運(yùn)行時(shí)間。

map(data_trunk.pop, ['weather'])

3. 最后就是data_to_sql():

def data_to_sql(df):
 table = 'request_data_api'
 engine = create_engine("mysql+pymysql://" + 'root' + ":" + '123' + "@" + 'localhost' + ":" + '3306' + "/" + 'test' + "?charset=utf8")
 df.to_sql(name=table, con=engine, if_exists='append',
   index=False, index_label=False)

入?yún)ⅲ篸ataframe類型數(shù)據(jù)。

當(dāng)當(dāng)當(dāng),正常部分已完成,就下來就需要想象各種異常以及處理對(duì)策。

第二輪,想象各種異常以及異常的記錄與處理對(duì)策。

1.讀取url后,獲取不到數(shù)據(jù) → 休息幾秒,嘗試再次重連獲取

2.連接數(shù)據(jù)庫異常 → 數(shù)據(jù)庫可能關(guān)閉,嘗試重新ping,

3.寫入數(shù)據(jù)庫的內(nèi)容為空 → 記錄異常,放棄入庫

第三輪,讓程序定時(shí)跑起來。

方法一:在代碼中采用apscheduler下的cron功能(trigger='cron‘,類似linux下的crontab)實(shí)現(xiàn)定時(shí)運(yùn)行(當(dāng)然,apscheduler還有另一種trigger=‘interval'模式);

方法二:在linux下的crontab增加定時(shí)任務(wù)。

具體可以看別的帖子。

以上就是python 調(diào)用API接口 獲取和解析 Json數(shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于python 解析數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python 正則表達(dá)式的非捕獲組詳解

    Python 正則表達(dá)式的非捕獲組詳解

    非捕獲組 ((?:...)) 在 Python 正則表達(dá)式中用于分組但不保存匹配結(jié)果,通過 '?' 表示非捕獲標(biāo)記,常用于簡(jiǎn)化正則表達(dá)式和提高性能,它在選擇、提高匹配性能和結(jié)構(gòu)化復(fù)雜表達(dá)式方面都有優(yōu)勢(shì),本文介紹Python 正則表達(dá)式的非捕獲組的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2025-02-02
  • numpy給array增加維度np.newaxis的實(shí)例

    numpy給array增加維度np.newaxis的實(shí)例

    今天小編就為大家分享一篇numpy給array增加維度np.newaxis的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 30秒輕松實(shí)現(xiàn)TensorFlow物體檢測(cè)

    30秒輕松實(shí)現(xiàn)TensorFlow物體檢測(cè)

    這篇文章主要為大家詳細(xì)介紹了30秒輕松實(shí)現(xiàn)TensorFlow物體檢測(cè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python實(shí)現(xiàn)字符型圖片驗(yàn)證碼識(shí)別完整過程詳解

    Python實(shí)現(xiàn)字符型圖片驗(yàn)證碼識(shí)別完整過程詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)字符型圖片驗(yàn)證碼識(shí)別完整過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python中的google authenticator認(rèn)證過程

    Python中的google authenticator認(rèn)證過程

    文章介紹了使用Python 3.7生成Google Authenticator所需密鑰的步驟,包括使用pyotp模塊生成密鑰、生成二維碼圖片以及通過客戶端掃描二維碼進(jìn)行二次認(rèn)證的實(shí)現(xiàn)原理
    2024-11-11
  • Django中外鍵ForeignKey介紹使用

    Django中外鍵ForeignKey介紹使用

    本文主要介紹了Django中外鍵ForeignKey介紹使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Python批量修改文件名實(shí)例操作分享

    Python批量修改文件名實(shí)例操作分享

    這篇文章主要介紹了Python批量修改文件名實(shí)例操作分享,問咋還那個(gè)主要通過以修改圖片文件名為例,將圖片復(fù)制到新的目錄中再修改名稱,下文詳細(xì)操作過程需要的小伙伴可以參考一下
    2022-04-04
  • 教你Pycharm安裝使用requests第三方庫的詳細(xì)教程

    教你Pycharm安裝使用requests第三方庫的詳細(xì)教程

    PyCharm安裝第三方庫是十分方便的,無需pip或其他工具,平臺(tái)就自帶了這個(gè)功能而且操作十分簡(jiǎn)便,今天通過本文帶領(lǐng)大家學(xué)習(xí)Pycharm安裝使用requests第三方庫的詳細(xì)教程,感興趣的朋友一起看看吧
    2021-07-07
  • Python反射操作對(duì)象屬性方法詳解

    Python反射操作對(duì)象屬性方法詳解

    這篇文章主要介紹了Python反射操作對(duì)象屬性方法詳解,在Python面對(duì)對(duì)象中,通過字符串的形式去操作對(duì)象的屬性方法就稱之為反射(在Python中一切事物都是可以為對(duì)象),需要的朋友可以參考下
    2023-08-08
  • Python打印獲取異常信息的代碼詳解

    Python打印獲取異常信息的代碼詳解

    在日常的軟件開發(fā)工作中,異常處理(Exception Handling)是一個(gè)至關(guān)重要的環(huán)節(jié),它不僅影響到程序的穩(wěn)定性和健壯性,還在提高用戶體驗(yàn)、調(diào)試問題以及防止安全漏洞方面起到了不可替代的作用,本文給大家介紹了Python打印獲取異常信息,需要的朋友可以參考下
    2024-10-10

最新評(píng)論

砀山县| 滨海县| 阳高县| 来安县| 安国市| 淮滨县| 申扎县| 麦盖提县| 临江市| 灯塔市| 垣曲县| 海阳市| 通山县| 鄂托克旗| 辽源市| 和田县| 当雄县| 格尔木市| 崇礼县| 休宁县| 邢台县| 体育| 晋州市| 江门市| 宿迁市| 新兴县| 酉阳| 清涧县| 仙居县| 普宁市| 荥经县| 利辛县| 罗田县| 卓尼县| 和平县| 常熟市| 武汉市| 广河县| 安福县| 光泽县| 乌苏市|