前言
最近疫情泛滥,大家注意防护,尽量少出门,在家也别忘了学习~
小编针对疫情实况数据进行了了爬取,并生成了可视化地图。
让我们在防护的同时,也来学习一下吧~
项目简介
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
这样我们一个爬虫小项目就完成了~