电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:2日期:2022-07-09 16:23:22

任務背景:

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

先從宏觀上看這個任務,并對任務進行分解:

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

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

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

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

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

1、先看request_data():

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

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

2、然后看parse_data():

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

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

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

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

摘取部分數(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') #獲取當前時刻 for i in range(len(data_trunk)): data_unit = data_trunk[i] # 依次獲取列表下第i個元素即字典 del data_unit[’weather’] # 刪除該字典中不需要的一鍵多值的key和value,不刪除的話會影響后續(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ù)的當前時間,并且需要放在dataframe的第一列

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

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

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

def parse_data(req_jason): data_trunk = req_jason[’data’]# 獲取data鍵值下的列表 time_now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') #獲取當前時刻 for i in range(len(data_trunk)): data_unit = data_trunk[i] # 依次獲取列表下第i個元素即字典 del data_unit[’weather’] # 刪除該字典中不需要的一鍵多值的key和value,不刪除的話會影響后續(xù)的dataframe轉(zhuǎn)換,但是,如果該鍵值需要的話,需要采取其他處理方式 df = pd.DataFrame(data_trunk) # 將刪除鍵值后的整個列表套字典轉(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ù)的當前時間,并且需要放在dataframe的第一列

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

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

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ù)。

當當當,正常部分已完成,就下來就需要想象各種異常以及處理對策。

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

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

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

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

第三輪,讓程序定時跑起來。

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

方法二:在linux下的crontab增加定時任務。

具體可以看別的帖子。

以上就是python 調(diào)用API接口 獲取和解析 Json數(shù)據(jù)的詳細內(nèi)容,更多關于python 解析數(shù)據(jù)的資料請關注好吧啦網(wǎng)其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 时代北利离心机,实验室离心机,医用离心机,低速离心机DT5-2,美国SKC采样泵-上海京工实业有限公司 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 电地暖-电采暖-发热膜-石墨烯电热膜品牌加盟-暖季地暖厂家 | 电池挤压试验机-自行车喷淋-车辆碾压试验装置-深圳德迈盛测控设备有限公司 | 万博士范文网-您身边的范文参考网站Vanbs.com | 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 上海律师咨询_上海法律在线咨询免费_找对口律师上策法网-策法网 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | 中国玩具展_玩具展|幼教用品展|幼教展|幼教装备展 | 冲击式破碎机-冲击式制砂机-移动碎石机厂家_青州市富康机械有限公司 | 冲锋衣滑雪服厂家-冲锋衣定制工厂-滑雪服加工厂-广东睿牛户外(S-GERT) | 办公室家具公司_办公家具品牌厂家_森拉堡办公家具【官网】 | 鑫铭东办公家具一站式定制采购-深圳办公家具厂家直销 | 智慧钢琴-电钢琴-便携钢琴-数码钢琴-深圳市特伦斯乐器有限公司 | 土壤养分检测仪|土壤水分|土壤紧实度测定仪|土壤墒情监测系统-土壤仪器网 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | 章丘丰源机械有限公司 - 三叶罗茨风机,罗茨鼓风机,罗茨风机 | 高压无油空压机_无油水润滑空压机_水润滑无油螺杆空压机_无油空压机厂家-科普柯超滤(广东)节能科技有限公司 | 聚丙烯酰胺PAM-聚合氯化铝PAC-絮凝剂-河南博旭环保科技有限公司 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 南京精锋制刀有限公司-纵剪机刀片_滚剪机刀片_合金刀片厂家 | 拉曼光谱仪_便携式|激光|显微共焦拉曼光谱仪-北京卓立汉光仪器有限公司 | 圣才学习网-考研考证学习平台,提供万种考研考证电子书、题库、视频课程等考试资料 | 北京翻译公司_同传翻译_字幕翻译_合同翻译_英语陪同翻译_影视翻译_翻译盖章-译铭信息 | 圣才学习网-考研考证学习平台,提供万种考研考证电子书、题库、视频课程等考试资料 | 智慧农业|农业物联网|现代农业物联网-托普云农物联网官方网站 | 真空乳化机-灌装封尾机-首页-温州精灌 | GAST/BRIWATEC/CINCINNATI/KARL-KLEIN/ZIEHL-ABEGG风机|亚喜科技 | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 电抗器-能曼电气-电抗器专业制造商| 博博会2021_中国博物馆及相关产品与技术博览会【博博会】 | 高尔夫球杆_高尔夫果岭_高尔夫用品-深圳市新高品体育用品有限公司 | 除甲醛公司-甲醛检测治理-杭州创绿家环保科技有限公司-室内空气净化十大品牌 | 塑料异型材_PVC异型材_封边条生产厂家_PC灯罩_防撞扶手_医院扶手价格_东莞市怡美塑胶制品有限公司 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | Safety light curtain|Belt Sway Switches|Pull Rope Switch|ultrasonic flaw detector-Shandong Zhuoxin Machinery Co., Ltd | 石英陶瓷,石英坩埚,二氧化硅陶瓷-淄博百特高新材料有限公司 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 喷漆房_废气处理设备-湖北天地鑫环保设备有限公司 | 聚合氯化铝价格_聚合氯化铝厂家_pac絮凝剂-唐达净水官网 |