网站信息监测系统的设计与实现

2023-07-06 08:55艳,刘
鞍山师范学院学报 2023年2期
关键词:树莓日志温湿度

那 艳,刘 磊

(鞍山师范学院 信息中心,辽宁 鞍山 114007)

校园网站是学校对外宣传、沟通交流、分享学术资源的重要渠道,为广大师生提供教学、科研与管理服务.随着高校信息化建设的快速发展,很多高校引进网站群技术,利用统一技术框架、统一数据平台实现网站分级管理、信息高度耦合与资源共享.同时,伴随网站规模的不断扩大、功能扩展的进一步增强以及信息量的急剧增加,网站管理变得越来越复杂.网站的日常维护和管理旨在确保网站的安全、平稳、高效运行,通过对其内容的及时更新和调整,确保信息发布等功能的充分发挥,实现资源共享[1].针对学校网站平台多样、数据量庞大、更新频繁等特点,快速获得网站最新发布内容、确保网站的安全性、准确性已成为网站管理人员亟待解决的问题.大多数网站把监控研究的重点放在网站安全性上,主要关注网站是否被篡改、网站是否存在暗链、是否包含恶意代码以及敏感词过滤等方面问题,鲜有对网站数据更新方面的实时监测进行研究.

在网站的日常维护管理中,需要定期巡查各站点的新闻发布更新情况,确保新闻的准确性、完整性、时效性.设计一款自动高效的网站实时信息监测系统,利用Python网络爬虫技术抓取网站群地址列表的网页信息,通过与历史数据比对找出最新发布消息,再利用Web页面形式展示今日更新、历史新闻、新闻更新数量统计、网站在线情况、机房环境温湿度曲线图表、网络设备连接状态等信息.网站管理人员能够有效地了解网站群的运行情况,如网站是否发布了实用性、新颖性、可靠性的信息;网站访问是否畅通可达;机房环境是否温度过高;网络线路设备是否异常等.该监测系统能够协助网站管理人员更加高效地管理学校各站点,进而提高工作效率.

1 相关技术分析

1.1 Python网络爬虫技术

网络爬虫(Web crawler)是一种按照一定的规则自动抓取万维网信息的应用程序或脚本.互联网搜索引擎的底层就是爬虫,它可以自动采集所有其能访问到的页面内容,以获取或更新这些网站的内容和检索方式,其工作原理是基于Http中的请求响应机制.首先,定位URL地址,确定要爬取的网页数据;其次,通过Http/Https协议获取对应的HTML页面;再次,从页面中将需要的内容进行保存,如果还有其他URL地址则继续重复执行该过程.Python提供了丰富的扩展库可以实现爬虫,常用的库有Requests、re、Beautiful Soup以及Lxml等[2].Requests库能够模拟Http请求,获取响应,从响应的HTML中获取数据.Beautiful Soup库提供一些简单的函数用来处理导航、搜索、修改分析树等功能,是个工具箱,其通过解析文档为用户提供需要抓取的数据[3].Python语法优美,代码简洁,开发效率高且支持模块多.

1.2 树莓派

树莓派是一款开源硬件,搭载CPU、图像处理器、内存、USB控制器等构成一个低功耗片上系统,是轻量级的Linux计算机.其拥有GPIO数模转换接口,通过该接口可以控制各种传感器、电机等.树莓派具有价格低廉、速度快、便于移动、能二次开发等特点,广泛应用于各个领域,可以提供网络、文件、音视频相关的各种服务,如连接硬件用来做数据采集、监控、分析、发布等.本系统采用树莓派和温湿度传感器设计开发机房温湿度环境监测模块.

2 系统设计思路

系统设计总体目标是使用网络爬虫实现网站信息的自动实时监测,利用树莓派监测机房环境温湿度变化情况等.

使用网络爬虫技术模拟浏览器对学校站群内各站点的首页发起请求,获取服务器响应、进行页面解析后存储数据.系统具有数据采集、数据分析、信息展示、文件归档、清除历史文件等基本功能.(1)使用Python语言环境下的第三方库,通过urllib的Request库和Beautiful soup库等对学校网站群进行数据爬取,抓取内容为各网站发布的文章,包括文章的标题、链接地址、发布时间等.(2)利用Python的TIME库,调用当日的日期作为文件命名的一部分,通过比较采集数据与当日历史日志文件内容,获取当前最新的内容进行汇总,将机房温湿度环境监测数据绘制成温度、湿度曲线图,将网络出口、校内线路以及服务器网络设备运行连通状态绘制成表格.(3)生成HTML页面,将采集到的各种数据进行信息展示.系统会一直处于工作状态,每隔10 min自动运行一次,达到实时响应动态监测的目的,并定期检查更新情况.系统设计框架图如图1所示.

图1 系统设计框架图

机房环境监测模块运行在树莓派上,硬件设计采用树莓派连接温湿度传感器元件DHT11,通过网络将采集数据传输到文件系统进行保存.温湿度监测元件DHT11的VCC电源、DATA数据输出和GND接地的3个引脚与树莓派GPIO对应功能针脚相连.软件部分加载Python相关的GPIO和TIME库,定义数据口、初始化模式.首先,设置GPIO接口为写入数据模式,输出一个低电平信号,0.02 s后输出一个高电平信号启动模块测量,当DHT11接收开始信号后,将温湿度的数据传输至树莓派.然后,设置GPIO接口为读取数据模式,获取到高电平信号后,开始读取模块获取数据.在处理温度、湿度数据时,如果温湿度超过阈值将发送E-mail报警.

3 系统功能模块

3.1 数据采集

数据采集模块的设计目标是抓取网站群的内容更新,网络爬虫模拟浏览器行为对指定URL地址列表进行浏览,设置地址列表字段为网站标签、站点名称、网址、服务器状态、网页编码、是否采集信息等.地址列表可根据实际使用情况随时进行调整,网站标签具有唯一性,这里采用网站域名的一部分;网页编码方式有UTF-8、GBK,要根据不同网站的实际源码编码方式进行选择,否则会出现各种编码问题.利用Request扩展库向站点发起Http请求,获取响应数据,再通过Python中的Beautiful Soup库将HTML文档解析,获取标题、访问链接等信息.

在网络出口、校内线路、服务器和网络设备连接状态的数据采集中,可根据ping命令收发ICMP的包数来判断网络状态.使用 Python的os库调用popen()函数获取ping命令结果,在os.popen()函数与cmd命令窗口之间建立一个双向通道,可以从cmd窗口和程序间相互读取信息.如若命令返回结果中有“icmp_seq”,证明ping命令成功,则将网络状态连通结果返回;否则,ping命令失败,网络状态即为断开.将所有要监测的设备IP建立列表,包括互联网出口、校内各个楼宇三层交换设备、路由器、防火墙、行为管理、服务器、核心交换机等.

3.2 数据处理与分析

数据的存储方式为文件系统,使用文件系统存储网页文件相较于关系型数据库更具优势,且查询效率更高.使用Python的os库操作文件,实现创建文件夹、保存、重命名等功能.遍历网站群的URL地址,获取网站首页新闻并写入当日采集日志文件中,对其做增量处理.同时,将offline状态网站写入网站离线日志文件中,分析获取的新闻,找出最新发布消息.这里代码主要编写两个函数getNews和getNewNews.函数getNews用于采集网站当天首页新闻标题和链接信息,并保存到文件.文件以网站唯一标签加日期戳的方式命名,这样就可以生成一个具有特定意义的日志文件,便于后期进行查询比较.在处理网站首页标签内容时,需要特殊处理超级链接地址,将其中相对链接统一更改为绝对链接,只有判断为新增加的内容才被写入文件.通过查看是否采集到网站数据来判断网站是否在线,并将网站状态信息返回.函数getNewNews用于获取新增加的新闻.判断日志文件是否存在:如不存在,返回状态信息“网站或采集数据有问题”;如存在,则继续判断有几天的连续文件.利用循环语句比较某日和前一日的新闻增量,将连续几天的新闻增量进行累计.如只有当前日期文件,提示这是个新网站,不显示信息,只提供网站链接.其中,参数days计算过去的新闻天数用负数表示:-1表示存放的最新消息,相当于今天的新闻比较昨天的新闻增量;-7表示存放过去7天的消息,不包括今日最新消息.核心代码为

def getNewNews(label,webname,url,logfile_dir,filename,days):

# label 网站标签,文件名的开始部分

# webname网站名称

# url网站链接地址

# logfile_dir 日志文件存放的目录

# filename 日期变量是文件名的后一部分

# days 计算过去的新闻天数用负数表示

news={} # key:新闻标题 value:网站名+日期

j=1

for i in range(days,1)[::-1]:

if os.path.exists(logfile_dir+label+str(filename+datetime.timedelta(i))+'.txt'):

j=i

else:

break

if j==1:

return news,webname+' 网站或采集数据有问题.
'

if j==0:

return news,' 暂时不能采集数据,请访问网站获得相关信息.
'

k=1 if days==-1 else 0 # 计算一周新闻回顾时不包括今日更新

for i in range(j+1,k)[::-1]:

list1=OpenFileLines(label+str(filename+datetime.timedelta(i))+'.txt',logfile_dir)

list2=OpenFileLines(label+str(filename+datetime.timedelta(i-1))+'.txt',logfile_dir)

for line in list1:

if not(line in list2):

news[line]='['+str(filename+datetime.timedelta(i))+']'+webname+' '

return news,''

3.3 信息展示

展示层是对采集到的数据通过列表、折线图和曲线图等方式进行展示和分析的Web页面,主要展示内容包括今日更新、一周回顾、历史新闻、新闻发布数量、网站离线提示、网站在线状态、每日新闻发布数量统计折线图、机房温湿度监测曲线、网络设备连接状态等几部分.因为监测网站最新发布的数据是通过HTML文件的形式展现的,而Nginx多用于处理静态HTML请求,且具有占用内存少、性能稳定、系统资源消耗低以及优秀的高并发处理能力等特点,所以,系统搭建Nginx网站服务器运行环境.系统将采集到的数据以“W”写入模式,按照DOM树结构分header、body、footer节点逐行写入首页文件.今日更新和一周回顾首先定义字典变量,调用新增新闻函数getNewNews获取1日和7日新增新闻,然后再经过排序遍历后逐条写入首页文件.历史新闻、新闻发布数量日志文件以及网站离线日志文件分别文本链接到对应的日志文件.网站状态则是循环遍历网站地址列表,判断所有网站是否在线,同时将站点名称以及在线信息写入文件,离线网站显示为offline,在线网站为online.根据近一月内每日发布的新闻数量绘制每日新闻数量统计折线图,根据树莓派采集到的温湿度数据绘制温度和湿度曲线图,折线图和曲线图均通过调用图片的方式展示.

3.4 文件归档

文件归档包括HTML文件、CSV文件两部分.HTML文件归档后相对目录变化,去掉logFiles目录、折线图、新闻发布数量日志文件和网站离线日志文件的链接;CSV文件包括新闻发布数量日志文件和离线日志文件,由原来的root_dir目录变更到了logfile_dir目录.文件系统中首页文件保留1 000天,TXT和CSV文件均保留30天.文件归档使用文件的读写进行复制操作.清除历史文件用Python的os.stat()方法在给定的路径上执行一个系统stat的调用,将最新元数据修改时间超过30天的TXT和CSV文件,或者超过1 000天的HTML文件进行移除.文件归档能够及时清理历史文档,释放存储空间,从而保障程序正常有效运行.

4 系统实现

网站群内容更新监测页面(如图2所示)实时直观地展现了“今日更新”的全部新闻.监测时间是每10 min刷新一次页面,同时,“一周回顾”和“历史新闻”分别以7日和30日为周期统计历史新闻发布情况.“网站状态”则实时描述了站群内所有网站的服务状态,对于已下线(offline)的网站进行特殊标红,警示管理人员及时查看网站,排查运行故障.利用Matplotlib绘制新闻发布数量折线图(如图3所示),通过图表形式直观呈现每日新闻发布数量的走势.

温度曲线图(如图4所示)显示机房近12 h内的温度历史数据,使管理人员能够了解一段时间内的温度变化情况,以便做出合理决策.

图2 网站群内容更新监测页面

图3 新闻发布数量折线图 图4 温度曲线图

5 结束语

基于Python语言开发的网站信息监测系统具有比较通用的程序框架、实时高效的数据采集与分析、清晰且直观的展示页面,实现了对网站群内新闻发布状态、机房环境以及线路网络设备连通状态等信息的一站式监测管理.网站信息监测系统通过网络爬虫和树莓派等技术实现了信息的实时监测与统计分析,使网站管理人员能够有效地掌握网站运行状态,及时发现问题并解决问题,同时,也使繁杂的网站日常管理工作变得更加简单、精准、高效,极大地提高了校园网站管理水平与服务质量.

基于网站管理工作的任务需求,该系统的功能还可以进一步添加和完善,如增加关键词监测、绘制各网站的年度新闻发布数量占比图等功能.

猜你喜欢
树莓日志温湿度
一名老党员的工作日志
温湿度控制器在回收砂冷却系统中的应用
扶贫日志
基于DSP的多路温湿度监测系统
基于树莓派的骑行智能头盔设计
基于温湿度控制的天气预测装置
基于树莓派的远程家居控制系统的设计
游学日志
蒸发冷却温湿度独立控制空调系统的应用
响应面法优化红树莓酒发酵工艺