专栏名称: 小蚊子数据分析
数据分析知识、培训、招聘分享。
目录
相关文章推荐
Foodaily每日食品  ·  费列罗收购Power ... ·  3 天前  
每天学点做饭技巧  ·  拯救你的睡眠!睡前喷一喷。 ·  2 天前  
日食记  ·  节后刮油菜谱,少油少盐还很鲜。 ·  3 天前  
每天学点做饭技巧  ·  林志颖现在为什么不让Kimi露脸了?看到他1 ... ·  3 天前  
无锡博报生活  ·  地铁直达!无锡这里太好吃了! ·  3 天前  
无锡博报生活  ·  地铁直达!无锡这里太好吃了! ·  3 天前  
51好读  ›  专栏  ›  小蚊子数据分析

网易实时疫情数据Python抓取

小蚊子数据分析  · 公众号  ·  · 2020-02-21 09:18

正文

有朋友反馈之前抓取百度疫情数据的代码已经无法运行,没看过的朋友可以点击下列链接查看。

Python抓取实时数据绘制地图

看了下,因为百度调整了部分页面信息,代码要调整下就可以使用了,那如果下次再调整呢?你说这概率大不大?

我觉得是相当的大,那有没有稳定点的方法呢?

这样问,肯定是有的,就是换种方式获取疫情实时数据。

这次我们来抓取网易JSON疫情数据。

链接是这个

https://c.m.163.com/ug/api/wuhan/app/data/list-total

打开网址,看到是这样的,如果你是第一次接触JSON数据,包你看的一脸懵逼。不过不要紧,如果你用的是火狐浏览器,你还可以发现上方还有JSON、美化输出等功能。

这是点美化输出的效果,看起来是不是好一点,不过还是一脸懵逼对不对,因为你就没接触过JSON数据嘛。


这是点 JSON 的效果,有不同颜色了,看起来更舒服了

好了,我们开始进行数据抓取与导入了。先导入需要用的模块。

import json
import requests
from pandas.io.json import json_normalize

然后开始抓数据

url="https://c.m.163.com/ug/api/wuhan/app/data/list-total"
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'}
ret=requests.get(url, headers=headers)
result=json.loads(ret.content)


查看下抓到的数据result,可以看到是个字典,我们要的数据在key=data里面。

继续双击点开 data ,我们要的数据在areaTree 里面。

继续双击点开areaTree,这时areaTree是个列表,我们要的数据第一行里面。

继续双击点开areaTree的第一 行, 这时候又变成一个字典了,看到中国没有?哈哈,我们要的数据在 key=children里面。

继续双击点开 children,这就是我们要的数据啦,这又变成了一个列表,每一行就是一个省的数据

我们点开第一行看看,看到没有,湖北出现了。

如果继续点 children,就是湖北各城市的数据啦,不点不点了,我们就只要省份数据,怎么提出来呢?继续 进行数据处理,提取出我们要的数据。

t= result['data']['areaTree'][0]['children']
sf=json_normalize(t)

就这么两句代码就出来了,哈哈!我们来看下数据。

taday. 开头的都是最新的“今 ”数据,也就是新增数据, total. 开头的就是累计数据, confirm 是确诊人数,suspect是疑似,heal是出院,dead是死

我们要的字段就是name、total.confirm, name就是省份名, total.confirm 就是累计确诊人数。直接把 name、total.confirm 替换之前绘制地图的代码相应位置。

# 将数据转换为二元的列表
list1 = list(zip(sf['name'],sf['total.confirm']))
# 创建一个地图对象
map_1 = Map()
#对全局进行设置
map_1.set_global_opts(
#设置标题
title_opts=opts.TitleOpts(title="全国疫情地图"),
#设置最大数据范围
visualmap_opts=opts.VisualMapOpts(max_=2500,range_color=["#FFFFFF","#FFCC00","#CC0000"]))

# 使用add方法添加地图数据与地图类型
map_1.add("累计确诊人数", list1, maptype="china")

# 地图创建完成后,通过render()方法可以将地图渲染为html
map_1.render('全国疫情地图.html')

然后地图绘制结果就出来了







请到「今天看啥」查看全文