爬取丁香医生生成疫情热力地图

2020-02-24 18:04:50 浏览数 (1)

前言

最近疫情泛滥,大家注意防护,尽量少出门,在家也别忘了学习~

小编针对疫情实况数据进行了了爬取,并生成了可视化地图。

让我们在防护的同时,也来学习一下吧~

项目简介

https://ncov.dxy.cn/ncovh5/view/pneumonia?scene=2&clicktime=1579584467&enterid=1579584467&from=timeline&isappinstalled=0

我们爬取的是丁香医生的实时数据,下图勾画出来的是爬取的目标之一,是全国疫情数据,爬取截至数据统计时间,确诊数,疑似数,重症数,死亡数,治愈数,写入 csv 文件保存,其中文件名以截至时间命名:

目标二,我们往下滑,会看见地区,确诊,死亡,治愈的数据,我们就是把它们全都爬取下来,只需要中国的,其他欧洲,北美洲等,不需要:

JavaScript 判断

我们打开网页,先判断我们所需要的数据是否为动态加载,点击 url 左边的锁,禁止 JavaScript 加载,然后刷新网页:

刷新后的结果,我们可以看到什么都没有了,那说明我们需要的数据是动态加载的,我们把网页还原,把 JavaScript 设为允许加载即可。

数据源分析

我们打开开发者工具,切换到 Doc 选项卡查看当前网页加载的 html:

我们从上图可以看到关键数据没有加载,是通过勾画出来的文件请求生成的,我们从从看到 js 字样,那我们去 JS 选项卡找到它:

我们查看了这些 js 代码,在其中搜索数据,一个也没有,但数据就只请求这个 js 文件后展示在网页的,下边看了看有 3w 多行 js 代码,于是小编选择绕开,使用 selenium,即可绕开,效率没有太大影响。

网页源码获取

我们选择 selenium 访问这个页面,直接得到渲染后的 html,在从中提取我们的数据,请求代码如下,我们设置了请求头,加了无头模式,返回渲染后的 html:

这样我们就绕开了复杂的分析,直接获取了渲染后的 html。

提取全国疫情数据

我们先提目标一,全国疫情数据,并以截至时间创建 csv 文件,我们全部提取采用 bs4 库提取,我们以截至时间提取为例,在截至时间右键【检查】:

我们可以使用 find 方法提取出其中的文本,下面的确诊数,死亡数,治愈数也是一样的:

我们得到这部分数据后,其中包含了截至时间,我们以截至时间为文件名,创建 csv 文件保存数据:

提取各个省份数据

提取省份的数据也和上面一样的,也是用 find 方法即可,其中在匹配的标签中有些多余的,例如重复的标签,或者不是数据的标签,或者是外国地区的标签,我们都剔除掉:

写入 csv

我们爬取的数据是都先用一个列表存储的,全部爬取完毕后,再统一写入的:

结果展示

小编分三个时间段运行了三次,所以有三个 csv 文件,对应不同的时间段:

热力地图

在得到数据后,我们使用 pyecharts 库生成热力地图:

END

这样我们一个爬虫小项目就完成了~

0 人点赞