利用爬虫设计全国疫情实时图

利用爬虫设计全国疫情实时图

三月 07, 2020

聊一聊

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 json
import requests
url = "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 json
import requests
url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"

data = json.loads((requests.get(url).json())['data'])
#print(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 json
import requests
url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"

data = json.loads((requests.get(url).json())['data'])
#print(data)
china = data['areaTree'][0]['children']
#print(china)
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 requests
import json
from pyecharts.charts import Map,Geo
from pyecharts import options as opts
from pyecharts.globals import GeoType,RenderType

url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"

data = json.loads((requests.get(url).json())['data'])
# print(data)

china = data['areaTree'][0]['children']
# print(china)

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文件,然后将其用浏览器打开看看结果吧

以上。一个简单的爬虫小程序就完成了,也构造了自己的疫情实时地图。

几句瞎扯淡

在这个疫情期间,请大家做好防护,多多呆在家里吧,和我一样的宅起来,减少人的流动就是在扼杀病毒的传递,那些奋斗在前线的医护工作者,我没有什么太多要说的,只能说作为一个普普通通的地球人,唯一要说的也只有感谢,唯一要抱有的就是感恩的心,祝安好!

希望这个疫情早日被消灭啊,我好想出门拍照呀!!!