时间:2024-05-04
乔士秀 圣文顺
(1.德州市市场监督管理局 山东省德州市 253500 2.南京工业大学浦江学院 江苏省南京市 211200)
进入21世纪,数据成为人类最宝贵的财富。如今,中国网民数量已经达到9亿之多。随意挑选一款互联网产品,可能就有几亿的用户。如何将数据有效地检索并组织呈现出来,有着巨大的应用前景。
面对庞大的数据量,如何有效的检索,并且直观的展示,就显得尤为重要。当今人们检索数据有两种方式。使用搜索引擎是最普遍的一种。搜索引擎的出现大大降低了人们获取数据的难度,人们可以轻松地通过检索关键字获得所需的数据。但是这种通用型爬虫缺点也是非常明显的,即无法获得特定的数据。最具有代表意义的就是每个网站的robots.txt文件,此文件可以要求通用型搜索引擎哪些资源不能被爬取。部分网站甚至所有内容都禁止爬取。用户就无法通过搜索引擎获取到这些信息。而另一种检索工具是主题网络爬虫[1],优势就显得非常明显。开发者首先分析目标网站的网页结构以及API信息,根据这些信息爬取所有需要的数据。之后使用数据处理的相关技术,提取出有价值的数据,最终通过可视化技术把数据直观的展现出来。由此带来了极大的便利。不同领域、不同背景的用户往往具有不同的检索目的和需求,通过主题爬虫,就能完美定制这些个性化服务。
网络数据爬取及展现系统是对bilibili网站各项数据可视化的平台。爬虫设置定时任务,每天根据配置自动抓取目标信息,并对数据进行处理,然后持久化到MySQL数据库。对于热门信息,存储到Redis数据库,以应对频繁访问与数据处理,如图1所示。
用户通过在可视化网站点击事件发送请求,通过接口在数据库中查询到相关数据,再返回到网站,绑定到相关元素节点上。对于部分数据设置自动刷新,时间间隔内自动向后台发送请求,刷新数据到网页上,如图2所示。
系统主要模块包括:可视化网站、后台管理网站、爬虫系统,如图3所示。
主要包括了bilibili网站基本数据展示、bilibili网站视频信息展示、bilibili网站用户信息展示模块。
(1)bilibili网站基本数据展示模块包括:网站实时在线人数、网站实时播放人数、网站每日在线人数、全站关键词词云。
(2)bilibili网站视频信息展示模块包括:当日热门视频排行榜、视频的具体信息,包括硬币数、播放数、收藏数、喜爱数、综合评分、投稿人信息、单日以上数据分析展示等。
(3)bilibili网站用户信息展示模块包括:当日最热用户排行榜、用户个人信息、用户简介、用户数据、用户视频排行榜。
主要包括了用户管理模块、爬虫管理模块。
(1)用户管理模块包括:用户的增加、删除、修改、更新。
(2)爬虫管理模块包括:爬虫具体状态展示、控制爬虫的运行状态、爬虫效率分析。
图1:爬虫系统的数据流图
图2:可视化平台的数据流图
主要包括了URL调度器、下载器、解析器、存储器、定时任务、消息队列,如图4所示。
(1)URL调度器包括:URL仓库、爬虫状态管理。
①URL仓库。所谓URL仓库就是Redis仓库[2],即在我们的系统中使用Redis来保存URL地址列表。只要保证了URL的唯一性,这样不管我们的爬虫程序有多少个,最终爬取下来的数据只有一份,不会重复。可以在此基础上实现爬虫的分布式。
②爬虫状态管理。通过在Redis中设置一组变量,爬虫每次爬取的时候需要判断自身是不是处于开启状态。也可以通过后台管理系统手动控制爬虫状态。
(2)下载器包括:下载HTML页面、下载JSON数据、IP代理池、反反爬措施
①IP代理池。加入随机IP代理主要是为了反反爬虫。如果有一个IP代理池,并且可以在构建HTTP客户端时可以随机使用不同的代理,那么对我们进行反反爬虫则会由很大的帮助。
这里通过快代理获取免费的IP,并把这些IP保存到Redis的Set数据结构[3]中。每次构建HTTP客户端时,会随机从Set集合中随机取出一个元素。如果爬取时产生请求失败,就将这一情况记录下来,当超过一定次数时,再将其从代理池中删除。
图3:网络数据爬取及展现系统的功能模块图
图4:爬虫架构图
②反反爬措施。对于每日任务,设置爬取间隔,降低被目标网站封禁的风险。
对于24小时不间断爬虫,需要设置IP代理池。
同时创建HTTP客户端的时候需要设置相关的头字段,对于一些特别的请求,需要根据时间动态改变头字段的值,以应对服务端的检查。
(3)解析器。解析器[4]的作用就是把下载的网页中对我们有用的数据解析出来,并保存到某个对象中,供存储器进一步持久化到数据库。解析器功能并不复杂,但是代码量比较多,比如对于不同的HTML文本或者JSON数据都需要不同的代码进行解析。
当然部分下载下来的文本里还有需要再次爬取的链接,我们就需要把这些链接保存到下载器队列里,以便再次爬取。这一过程称为抽链。
(4)存储器。把解析好的对象保存到数据库中,具体是什么数据库也可以手动设置,本系统的数据库为MySQL。
(5)定时任务。使用Spring Task作为定时任务。部分数据需要每天爬取并记录,用于数据分析。
(6)消息队列。由于将爬虫分成了url调度器、下载器、解析器、存储器,所以为了降低这几个组件之间的耦合性,需要这些两两之间设置阻塞队列,实现每个组件的独立运行。
(7)多线程。对于24小时不间断爬虫,每一个组件都实现了多线程。由于对象需要通过Spring Boot创建,因此需要注意多线程对象必须通过Spring容器对象获取。而不能通过注解获得。
通过分析一个爬虫的爬取过程,了解到爬虫的效率主要取决于下载器的下载的速度,所以本系统给下载器设置了5个线程,其它每一个组件都是单独的线程。虽然存储器与数据库交互需要时间,但是插入数据时使用了批量插入操作,并且线程独立运行。在这种情况下,实现了爬虫效率的最大化。
前端使用Vue.js框架[5]构建,由于后端分成多个模块,每个模块都有不同的接口,所以前端请求全部发送到同一个端口9001,然后通过Nginx请求[6]转发到对象模块。配置好生产环境相关信息,就可以使用相关命令打包项目。只需要把打包好的文件放到服务器上即可运行。
后端项目全部使用Spring Boot构建,只需要使用Maven的package命令就可以生成每个模块对应的JAR包,把JAR包放到服务器上,执行命令,即可运行后端项目。
爬虫使用Http Client技术[7]对网络发起请求,由于Http Client类似JDBC,写法比较繁琐,所以这里对Http Client进行了二次封装,减少代码冗余,并且配置Http Client对象为单例模式,提高效率。核心代码如下:
图5:可视化系统首页
图6:视频详细历史数据折线图可视化页面
图7:爬虫任务管理页面
网络数据爬取及展现系统可视化模块首页,主要是展示bilibili网站网站当前的一些基本信息。首先是所有用户中,粉丝数排名最靠前的两位制作者的数据对比,以及当前在线人数,如图5所示。
点击导航栏上的视频按钮,可以进入视频排行榜页面,这个页面会显示当日排名前20的视频信息,包括视频封面、标题、所属分区等,点击卡片的每一个分类,可以进入视频详情界面,点击视频排行榜中的某个视频,可以进入视频详情界面,此页面展示了视频的基本信息和视频详细历史数据的折线图,如图6所示。
爬虫管理模块主要是对后台的爬虫状态进行管理,也可以控制爬虫的状态。爬虫管理界面展示了当前系统爬虫总个数、爬虫执行任务的次数、正在运行的爬虫个数,也可以通过按钮实现爬虫的开关,点击爬虫列表页面,可以看到爬虫每一次执行任务的记录,包含爬虫的名称,爬虫当前状态,爬虫描述,爬取消耗的时间等信息。点击导航栏上的任务图表,进入爬虫任务信息图中,通过折线图展示爬虫每小时完成的任务、耗费的时间以及正在执行的任务,如图7所示。
网络数据爬取及展现系统是基于Java语言开发,在IntelliJ IDEA 2019.2版本基础上实现的,依托Tomcat作为WEB服务器,以MySQL作为后台数据库进行数据存储。爬虫在爬取到数据以后直接存储到MySQL数据库中,之后再使用定时任务每天对数据进行相关处理,处理完毕以后把数据再次保存新的存储库表中。对于热点数据或者经常需要爬取的数据URL,直接存储到Redis数据库中,以提高数据处理的效率。系统运行稳定,界面美观大方,具有较好的实用性。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!