聊一聊 2020年可以说是一个特殊的年份了,应该也是有很多人和博主一样在家里宅了快两个月了,每天醒来的第一件事就是打开手机查看疫情每日新增了多少病例,全国的病例累积数又达到了多少,在B站上也看到了有大佬up主用java做了病例扩散的模型图来告诉人们防控病毒的必要性,在微博和各大新闻平台都看见了疫情的地图趋势图,我们现在就用爬虫来做一个简单的疫情地图吧
数据来源 这里我们的数据来源选用了腾讯新闻的疫情实时图,这里选用的浏览器是Chrome,按F12查看network相关信息。
这里的请求地址url获取到是:https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5。
数据分析 这里我们在network左侧找到getOnsinfo?name=diease_h5,在右侧点击Preview,就可以查看到其json数据。
这里的json数据不太好看,我们用json格式器将其做一下转换,如下图所示。
观察整个数据分析,我们要找的是areTree中的第一个数据源,也就是中国,在其子数据下面有一个children子数据展示的是中国各个省份的信息
展示的信息主要有以下几个:“confirm”也就是“确诊”,“suspect”也就是“疑似病例”,“dead”也就是“死亡”,“heal”也就是“治愈”,我们的地图主要获取的也是这几个信息,有了我们所需要的目标信息,接下来可以动手写脚本了
爬虫脚本设计 这里使用的是python,引入的库是requests和json,脚本如下:
1 2 3 4 5 6 import jsonimport requestsurl = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5" data = json.loads((requests.get(url).json())['data' ]) print(data)
获取的数据如下图所示
获取到的是整个data数据,这里我们其实只需要的是中国里各省份的数据,所以这里在脚本里做一下调整
1 2 3 4 5 6 7 8 import jsonimport requestsurl = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5" data = json.loads((requests.get(url).json())['data' ]) china = data['areaTree' ][0 ]['children' ] print(china)
这里运行一下把获取到的数据打印出来,可以看出我们现在获取到的是中国的相关信息了
现在我们需要把我们所需要的信息提取出来,这里我们用一个for循环来实现,脚本如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import jsonimport requestsurl = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5" data = json.loads((requests.get(url).json())['data' ]) china = data['areaTree' ][0 ]['children' ] china_total = "确诊:" + str(data['chinaTotal' ]['confirm' ]) + \ "疑似:" + str(data['chinaTotal' ]['suspect' ]) + \ "死亡:" + str(data['chinaTotal' ]['dead' ]) + \ "治愈:" + str(data['chinaTotal' ]['heal' ]) + \ "更新日期:" + data['lastUpdateTime' ] data = [] for i in range(len(china)): data.append([china[i]['name' ],china[i]['total' ]['confirm' ]]) print(data)
这样我们就把我们所需的信息提取出来了,我们在打印一下看一下结果
okay,我们已经获取到想要的数据了,接下来时如何将其导入的地图中,python中有一个pyecharts的库可以供其调用地图,可以去官网查看相关的调用API,里面有很多的图表模型API
下面是放上整段代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 import requestsimport jsonfrom pyecharts.charts import Map,Geofrom pyecharts import options as optsfrom pyecharts.globals import GeoType,RenderTypeurl = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5" data = json.loads((requests.get(url).json())['data' ]) china = data['areaTree' ][0 ]['children' ] china_total = "确诊:" + str(data['chinaTotal' ]['confirm' ]) + \ "疑似:" + str(data['chinaTotal' ]['suspect' ]) + \ "死亡:" + str(data['chinaTotal' ]['dead' ]) + \ "治愈:" + str(data['chinaTotal' ]['heal' ]) + \ "更新日期:" + data['lastUpdateTime' ] data = [] for i in range(len(china)): data.append([china[i]['name' ],china[i]['total' ]['confirm' ]]) print(data) geo =Geo(init_opts=opts.InitOpts(width="1200px" ,height="600px" ,bg_color="#f1f3f6" ,page_title="全国疫情实时报告" ,renderer=RenderType.SVG,theme="white" )) geo.add_schema(maptype="china" ,itemstyle_opts=opts.ItemStyleOpts(color="rgb(241,243,246)" ,border_color="rgb(0,0,0)" )) geo.add(series_name="geo" ,data_pair=data,type_=GeoType.EFFECT_SCATTER) geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False ),effect_opts=opts.EffectOpts(scale=6 )) geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(min_=0 ,max_=349 ),title_opts=opts.TitleOpts(title="全国疫情地图" , subtitle=china_total, pos_left="center" , pos_top="10px" )) geo.render("render.html" )
运行后会生成html文件,然后将其用浏览器打开看看结果吧
以上。一个简单的爬虫小程序就完成了,也构造了自己的疫情实时地图。
几句瞎扯淡 在这个疫情期间,请大家做好防护,多多呆在家里吧,和我一样的宅起来,减少人的流动就是在扼杀病毒的传递,那些奋斗在前线的医护工作者,我没有什么太多要说的,只能说作为一个普普通通的地球人,唯一要说的也只有感谢,唯一要抱有的就是感恩的心,祝安好!
希望这个疫情早日被消灭啊,我好想出门拍照呀!!!