python请求api获取json,python 获取json

  python请求api获取json,python 获取json

  任务背景:

  调用API接口数据提取所需类型的数据,并写入指定的mysql数据库。

  先从宏观上看这个任务,再把它分解:

  第一步:需要学习如何用python从url读取数据。

  Step2)数据分析也是核心部分。数据形式要从python的角度来理解。字典?列表?还是各种嵌套?

  第三步:连接MySQL数据库并写入数据。

  数据采集程序在功能上可以分为三种方法:对应step1的request_data(对应step2的parse_data)和对应step3的data_to_db。

  第一轮不考虑异常,只考虑正常状态下的功能实现。

  1.首先看request_data(:)

  导入请求

  efrequest_data(URL):

  Req=requests.get(URL,timeout=30) #请求连接

  Req _杰森=req。JSON(#获取数据

  退货请求_jason

  参考:url地址;返回:获得的数据。

  2.然后检查parse_data(:)

  不同的API接口有不同的数据格式,需要先整理出来。打开后排列密集,你可能连完整的数据区间在哪里都不知道。此时,可以巧妙地使用符号{[,]}来辅助判断。

  经过整理,发现这个界面中数据格式的最外层是dictionary,我们需要的数据在初始键“data”下,数据对应的值是一个列表,列表中的所有元素都是dictionary,是字典中键值的一部分。

  这是我们需要的。如上所述,已经发现我们的数据结构是一个字典集列表,它将字典重新格式化,在最低的字典中有一键多值(例如“天气”)。

  当然,偷懒也有办法。百度json在线分析格式。

  提取的部分数据如下。(数据(:(timestamp _ UTC):)2020-08-31t 0833600336000),(天气):)图标)33660

   wind _ dir :336 , clouds _ hi :0 , precip :0.0625 } ,{ timestamp _ utc 3360 2020-08-31t 088-31t 080

   Wind_dir:336, clouds_hi:0, precip:0.0625], city _ name: diagnosis bu , lon 336666600

  efparse_data(req_Jason):

  Data _ trunk=req _ Jason [data] #获取数据键值下的列表

  Time _ now=datetime.datetime.now(。strftime (%y-%m-%d% h:% m3360% s ))来获取当前时间。

  forIinrange(Len ) data_trunk):

  依次获取字典作为data_unit=data_trunk[i] #列表中的第I个元素。

  Del data_unit[weather] #从该字典中删除不必要的一键多值键和值。如果不删除,会影响后续的dataframe转换,但是如果需要键值,就需要做其他处理。

  Df=PD.dataframe([data_unit])将删除了键值的字典转换为datafrme。

  List_need=[timestamp_utc , wind_dir , precision , clouds_hi] #列出必需的列

  Df_need=Df[list_need] # Add在保存df所需的10df_need.insert(0, update_time ,time_now)表的列中添加数据采集的当前时间。

  注意:将数据插入数据库有两种方法:使用insert SQL语句以字典格式插入,或者使用熊猫to _ SQL方法的dataframe方法。在这种情况下,选择后者,因此在数据分析期间,字典数据被转换为dataframe格式。

  参考:采集的数据;返回值:无

  运行后发现这类程序存在一些问题。这意味着for循环太多,对数据库的写入只能是一次写入,不能是整个块,会影响程序的效率,所以程序必须做如下修改。

  efparse_data(req_Jason):

  Data _ trunk=req _ Jason [data] #获取数据键值下的列表

  time_now=datetime.datetime.now()。strftime(%y-%m-

  %d %H:%M:%S) #获取当前时间

  对于范围内的I(len(data _ trunk)):

  Data_unit=data_trunk[i] #依次获取列表下的第I个元素,也就是字典。

  Del data_unit[weather] #删除本字典中不必要的键和一键多值的值。如果不删除,会影响后续的dataframe转换。但是,如果需要键值,就需要采取其他的处理方法。

  Df=pd。DataFrame(data_trunk) #将删除了键值的整个列表字典转换为datafrme

  List _ need=[timestamp _ UTC , wind _ dir , precision , clouds _ hi] #列出我们需要的列

  Df_need=Df[list_need] #在df中保留必需的列

  在df _ need.insert (0, update _ time ,time _ now) #表中,需要添加数据采集的当前时间,需要放在dataframe的第一列。

  即在第7行后跳出循环;

  如果觉得for循环影响整体美观,也可以换成map,将代码行4/5/6改为如下代码。但是,for循环在性能方面可能更好。具体对比,看其他博主的测试,或者自己测试运行时间。

  地图(data_trunk.pop,[天气])

  3.最后,data_to_sql():

  定义数据到sql(df):

  表=请求数据应用编程接口

  engine=create _ engine( MySQL py MySQL:// root :123 @ localhost :3306 / test ?charset=utf8 )

  df . to _ SQL(name=表,con=引擎,if_exists=append ,

  index=False,index_label=False)

  参数:dataframe类型的数据。

  当正常部分已经完成后,就要设想各种异常情况,以及处理对策。

  二、想象各种异常及其记录和处理对策。

  1.看完网址,无法获取数据休息几秒钟,尝试重新连接再次获取。

  2.与数据库的连接异常数据库可能已关闭,请再次尝试ping。

  3.写入数据库的内容为空记录异常,放弃入库。

  第三轮,让程序有规律的运行。

  Fndgz:代码中采用了apscheduler下的cron函数(trigger= cron ,类似于linux下的crontab)来实现预定的操作(当然apscheduler还有另外一种trigger= interval 模式);

  Xsdjy:在linux下向crontab添加调度任务。

  具体可以看其他帖子。

  这就是python调用API接口获取和解析Json数据的细节。关于python解析数据的更多信息,请关注云海天教程其他相关文章!

  原文链接:https://www.cnblogs.com/xiamibao/p/13589798.html

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • js把字符串转为json,json字符串转换成json对象
  • js把字符串转为json,json字符串转换成json对象,js 将json字符串转换为json对象的方法解析
  • json语法格式,json格式定义
  • json语法格式,json格式定义,Json格式详解
  • json格式数据类型,什么是JSON数据-其常见格式是什么-
  • json格式数据类型,什么是JSON数据-其常见格式是什么-,JSON 数据格式详解
  • json格式怎么写,json文件内容格式
  • json格式怎么写,json文件内容格式,json文件书写格式详解
  • json数组对象转化为json字符串,js把数组转化为json
  • json字符串转换成对象有哪几种方法,字符串转化为json的方法
  • json字符串转换成对象有哪几种方法,字符串转化为json的方法,JSON对象转化为字符串详解
  • json基础介绍与详细用法教程,json基础知识
  • json基础介绍与详细用法教程,json基础知识,JSON基础介绍与详细用法
  • json去掉反斜杠,json字符串中有反斜杠
  • json去掉反斜杠,json字符串中有反斜杠,详解json串反转义(消除反斜杠)
  • 留言与评论(共有 条评论)
       
    验证码: