APP下载

基于网络爬虫疫情数据分析及可视化系统的设计与实现

2022-10-21文雪巍

黑龙江工程学院学报 2022年5期
关键词:爬虫可视化模块

文雪巍,邢 婷,李 鹏,孙 杰

(黑龙江财经学院 财经信息工程学院,哈尔滨 150025)

自从2020年新型冠状病毒肺炎疫情发生后,人们对疫情情况非常关注。大数据背景下,网络时刻产生海量疫情方面数据,这些数据只有被合理解读与展示,民众才能更好了解真实情况。借助网络爬虫技术和Echarts技术,再通过爬虫从网上获取到每日疫情的各项权威数据,清洗、转化和挖掘后通过Echarts整理成各种可视化统计图[1],以及每日热点搜图等以多种多样的可视化形式呈现在人们面前。通过疫情可视化页面,使人们能实时快速直观地了解疫情发展情况以及每日疫情感染人数的增长、治愈及死亡情况。全球防疫形势依然非常严峻,对疫情预防和控制仍然是当今全球共同使命[2]。通过可视化系统及时准确评估疫情传播、根据每日疫情数据了解疫情的情况,从而分析疫情发展趋势,这对于政府制定防控措施有着重要意义。因此,文中提出一种基于网络爬行器来监控疫情数据的方法,通过Python爬取疫情数据,显示疫情发生的实时状态,实现数据可视化,让人们看到世界疫情的实时数据以及疫情在中国的状态,以便做好必要的预防。

1 国内外研究现状

1.1 网络数据爬取现状

自20世纪90年代末国外首次开发出有历史记录的网络爬虫以来,爬虫技术成为搜索引擎技术的核心要素之一,近30 a来该技术日趋多样化[3]。各种爬虫系统是由不同的用户需求而开发的,根据实现技术和系统构成可以分为三大类:批量型网络爬虫、增量型网络爬虫和垂直网络爬虫[4]。理论上,任何支持网络通信的语言都可以写爬虫,爬虫本身虽然与语言关系不大,但总有相对简单的。目前,大多数爬虫用后台脚本类语言编写,其中,Python用得最多最广,并诞生很多优秀的库和框架,如Scrapy、BeautifulSoup、Pyquery、Mechanize等。

1.2 数据可视化现状

迈克尔于2008年提出将数据可视化划分为两部分:统计图形和主题图[5]。迄今为止,数据可视化技术在不断地发展,其应用范围和影响逐渐扩大。许多高校和一些大企业纷纷投入到可视化的研究中,每年都举办若干个数据可视化的国际会议。Microsoft、IBM、SAS等知名企业在数据可视化方面取得显著发展,开发出了许多成熟稳定的可视化产品或工具[6]。国内在可视化方面也取得了一定的成果,例如360大数据平台的可视化产品、ETHINK数据智能分析平台、阿里巴巴研发的淘宝指数等。

2 爬虫和数据可视化的概念

2.1 爬虫是什么

图1 爬虫步骤

1)发起请求。使用HTTP库向目标站点发起请求,即发送一个Request。Request包含请求头、请求体等。Request模块缺陷:不能执行JS和CSS代码。

2)获取响应内容。如果服务器能正常响应,则会得到一个Response。Response包含html、json、图片、视频等。

3)解析内容。解析html数据:正则表达式(RE模块)、第三方解析库如Beautifulsoup、Pyquery等;解析json数据:json模块;解析二进制数据:以wb的方式写入文件。

4)数据筛选过滤,包括数据抽取、数据清理、数据加载三部分。

5)保存数据。使用数据库MySQL、Mongdb、Redis保存文件。

2.2 数据可视化的概念

数据可视化指的是将数据用统计图表方式呈现。数据可视化起源于20世纪60年代计算机图形学,人们使用计算机创建图形图表,可视化提取数据,将数据的各种属性和变量呈现出来[9],例如饼图、直方图、散点图、柱状图等是最原始的统计图表,它们是数据可视化最基础和常见的应用。

数据可视化的开发和大部分项目开发一样,也是根据需求来确定数据维度或属性而进行筛选。有的可视化目标是为了观测、跟踪数据;有的为了分析数据;有的为了发现数据之间的潜在关联;还有的制作成海报、课件被用于宣传[10]。数据可视化的应用价值是能洞察世界的究竟,发现形形色色的关系,还能理解其他形式下不易发掘的事物[11]。

3 系统的设计与实现

Python爬虫和数据可视化分析是大数据时代计算机相关专业的必修课程,具有理论性和实践性较强的特点。因此,将两门课综合起来开发基于Python爬虫疫情数据分析及可视化系统具有一定的现实意义。

3.1 总体设计

系统主要分为开发者和用户两个角色,开发者进行软件设计、系统开发以及所有准备工作;用户通过浏览,查看相关疫情数据信息。疫情系统的整体用例模型如图2所示。

图2 系统用例模型

导入Python库:导入爬虫疫情数据所需要的各种数据库。

目标网站:腾讯新闻新型冠状病毒肺炎疫情实时追踪。

发送请求:通过发送请求返回的对象,获取到服务器相应内容。

提取数据:包括国家名称、确诊人数、死亡人数、报告日期等。

打包数组:将数据按照绘图模块的格式要求打包数组。

绘制世界地图:使用Echarts模块将疫情数据绘制在世界地图上。

Index.html:生成网页,疫情可视化系统。

通过分析用例模型,得出系统功能结构如图3所示。

图3 总体功能结构

3.2 数据库设计

用户进入网页后查询疫情数据,包括世界疫情数据和中国疫情数据,世界疫情数据有死亡率居前五的国家的条形统计图,中国疫情数据有新冠疫情患者居前五的城市的圆形统计图,用户可以直观地看到疫情数据。系统使用MySQL数据库,数据库中主要包括用户、疫情数据信息、中国疫情数据、各国疫情信息,如表1~4所示。

表1 用户

表2 疫情数据信息

表3 中国疫情数据

表4 各国疫情信息

3.3 详细设计与实现

3.3.1 注册界面设计与实现

用户登录系统之前需要注册。具体实现方法是用户注册界面通过GET方式向/templates/user/register接口写入SQL数据,通过sql_sel语句对用户写入的数据进行查询,如果重复,则使用printsql_name语句输出,并提醒用户帐号已经存在,如果查询用户注册输入信息时未重复,则使用print(sql_insert)语句输入数据,最后授予用户登录该帐号的权限。通过post方式,登录接口,将/templates/user/login接口的参数转换为Json格式,并将print.res用于登录系统。系统注册时序如图4所示。

图4 系统注册时序

3.3.2 主界面的设计与实现

系统主页面有6个点击框,用户可以根据自己的需要进行疫情数据的查询,也可以通过页面给定的图片点击浏览等功能,选择需要的疫情数据,进入后可以看到相关疫情数据,然后返回到主页面进行关于其他疫情数据的查看,根据需求调节疫情数据数量,如图5所示。

图5 系统主页

3.3.3 中国疫情数据设计

点击主页面中国疫情地图,可以看到全国确诊累计病例数据。鼠标移动到相应的省份可以看到病例数。首先从腾讯新闻疫情数据板块(https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5)把当天各省数据、浏览器抓包之后就会发现数据格式是Json数据(对于动态加载页面,数据格式一般都是Json)。省名和确诊病例数分别保存在data_zip和data_list两个列表中,待生成的疫情动态地图是一张分段型的中国地图,可以模仿分段型地图的代码来制作,也可以在地图中调用省名和累积诊断列表,maptype=“china”代表中国地图(还可以调用世界地图、省地图、城市地图),Pieces是分段,每个分段都用不同的颜色来区分。设置显示的参数,连续显示可以通过左侧的拉链调节数量,如图6所示。使用Ajax在界面上请求当天的数据。使用Gson工具将List转换为Json格式的数据,并返回给该界面。把自己的数据转换为标准数据形式的Echart(数组)数据处理。将数据按照绘图模块的格式要求打包数组,随机选取5个省份现存疫情确诊数据绘制饼图,如图7所示。

图6 2022年10月18日中国疫情数据(地图审图号:GS(2020)4632号)

图7 随机选取5省疫情确诊数据的占比统计

3.3.4 世界疫情数据设计

点击主页面全球疫情地图,可以看到世界各地确诊累计病例数据。鼠标移动到相应的国家看到病例数。首先从腾讯新闻疫情数据板块把当天各个国家(https://api.inews.qq.com/newsqa/v1/automation/foreign/country/ranklist)数据、浏览器抓包之后就会发现数据格式也是Json数据。将国家名称和确诊病例数分别存放在data_zip和data_list两个列表中,pieces是分段,对于每一段都设置了不同的颜色加以区分。设置显示的参数,连续显示可以通过左侧的拉链调节数量,如图8所示。使用Ajax在界面上请求当天的数据。使用Gson工具将List转换为Json格式的数据,并返回给该界面。把数据转换为标准数据形式的Echarts(数组)数据处理。将数据按照绘图模块的格式要求打包数组,从中选取国外疫情24小时新增确诊病例前10名国家数据以柱状图形式呈现,如图9所示。

图8 2022年10月18日全球疫情数据(地图审图号:GS(2020)4392号)

图9 2022年10月18日国外疫情24小时新增确诊病例前10名国家数据

3.3.5 系统功能的实现

1)导入Python库,requests是简单易用的Python实现的HTTP库,requests.get ()用于请求具有HTTP response类型的目标网站,是一个用来生成Echarts图表的类库。映射函数主要用于显示地理区域数据。

2)目标网站来自腾讯新闻https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5。

3)发送网络请求。

4)数据提取转换类型:Json类型转换为Dict类型。

5)从每一个国家中提取疫情数据,包括国名、诊断人数、死亡人数、报告日期等,并将其分类保存到数组。

6)将数据按照绘图模块的格式要求打包数组。

7)利用Echarts模块绘制世界疫情地图数据。

8)疫情数据生成HTML网页和Jupyter notebook内部的网页格式。

4 结束语

基于Python爬虫疫情数据分析及可视化系统的出现受到人们欢迎,点击率很高,可以实现实时查看疫情信息。系统优点是方便操作,可以根据需求点击相应模块,查看到相应的数据信息。缺点是对目标网站依赖性极大,如果管理员不能及时更新疫情信息和对信息进行增删改查,数据处理能力就会受到限制,尤其是在网站信息安全方面还有待进一步改善和提高。

猜你喜欢

爬虫可视化模块
利用网络爬虫技术验证房地产灰犀牛之说
基于CiteSpace的足三里穴研究可视化分析
自然资源可视化决策系统
28通道收发处理模块设计
“选修3—3”模块的复习备考
思维可视化
自然资源可视化决策系统
基于Python的网络爬虫和反爬虫技术研究
目前互联网中的网络爬虫的原理和影响
大数据背景下校园舆情的爬虫应用研究