网易实时疫情数据Python抓取
优采云 发布时间: 2022-05-11 14:53网易实时疫情数据Python抓取
有朋友反馈之前抓取百度疫情数据的代码已经无法运行,没看过的朋友可以点击下列链接查看。
看了下,因为百度调整了部分页面信息,代码要调整下就可以使用了,那如果下次再调整呢?你说这概率大不大?
我觉得是相当的大,那有没有稳定点的方法呢?
这样问,肯定是有的,就是换种方式获取疫情实时数据。
这次我们来抓取网易JSON疫情数据。
链接是这个
打开网址,看到是这样的,如果你是第一次接触JSON数据,包你看的一脸懵逼。不过不要紧,如果你用的是火狐浏览器,你还可以发现上方还有JSON、美化输出等功能。
这是点美化输出的效果,看起来是不是好一点,不过还是一脸懵逼对不对,因为你就没接触过JSON数据嘛。
这是点JSON的效果,有不同颜色了,看起来更舒服了。
好了,我们开始进行数据抓取与导入了。先导入需要用的模块。
import json<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />import requests<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />from pandas.io.json import json_normalize<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />
然后开始抓数据
url="https://c.m.163.com/ug/api/wuhan/app/data/list-total"<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36'}<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />ret=requests.get(url, headers=headers)<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />result=json.loads(ret.content)<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />
查看下抓到的数据result,可以看到是个字典,我们要的数据在key=data里面。
继续双击点开data,我们要的数据在areaTree里面。
继续双击点开areaTree,这时areaTree是个列表,我们要的数据第一行里面。
继续双击点开areaTree的第一行,这时候又变成一个字典了,看到中国没有?哈哈,我们要的数据在key=children里面。
继续双击点开children,这就是我们要的数据啦,这又变成了一个列表,每一行就是一个省的数据
我们点开第一行看看,看到没有,湖北出现了。
如果继续点开children,就是湖北各城市的数据啦,不点不点了,我们就只要省份数据,怎么提出来呢?继续进行数据处理,提取出我们要的数据。
t= result['data']['areaTree'][0]['children']<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />sf=json_normalize(t)<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />
就这么两句代码就出来了,哈哈!我们来看下数据。
taday.开头的都是最新的“今日”数据,也就是新增数据,total.开头的就是累计数据,confirm是确诊人数,suspect是疑似,heal是出院,dead是死亡。
我们要的字段就是name、total.confirm,name就是省份名,total.confirm就是累计确诊人数。直接把name、total.confirm替换之前绘制地图的代码相应位置。
# 将数据转换为二元的列表<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />list1 = list(zip(sf['name'],sf['total.confirm']))<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" /># 创建一个地图对象<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />map_1 = Map()<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />#对全局进行设置<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />map_1.set_global_opts(<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />#设置标题<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />title_opts=opts.TitleOpts(title="全国疫情地图"),<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />#设置最大数据范围<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />visualmap_opts=opts.VisualMapOpts(max_=2500,range_color=["#FFFFFF","#FFCC00","#CC0000"]))<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" /><br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" /># 使用add方法添加地图数据与地图类型<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />map_1.add("累计确诊人数", list1, maptype="china")<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" /><br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" /># 地图创建完成后,通过render()方法可以将地图渲染为html<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />map_1.render('全国疫情地图.html')<br style="box-sizing: border-box;max-width: 100%;overflow-wrap: break-word;" />
然后地图绘制结果就出来了。
------------
希望系统、快速学习Python数据分析知识,可以学习
数据分析专家@文彤老师的
《跟文彤老师学Python数据分析》系列视频课程
包含以下四门课程
Python数据分析--玩转Pandas
Python数据分析--玩转数据可视化
玩转Python统计分析
玩转Python统计模型
现参加课程学习,可享受6折优惠