APP下载

基于云计算的旅游信息聚合客户端的研发

2020-01-10卢弘卓黄家俊磨敦仁蔡群英

现代计算机 2019年34期

卢弘卓,黄家俊,磨敦仁,蔡群英

(韩山师范学院计算机与信息工程学院,潮州 521041)

0 引言

网上有着各种各样的旅游网站,而且其中的信息较为分散,这就导致了信息混乱,人们在短时间内很难找到对他们有用的内容[1]。基于云计算平台的旅游信息聚合客户端的研发,借助移动互联网技术和信息聚合技术,解决从分散的数据中获取潮州的旅游信息,方便用户在手机上一站式的浏览。通过对用户访问网站的行为,为用户进行个性化推荐。

阿里云轻量级服务器是阿里巴巴旗下的产品,它具有如下的优势。一是易于使用,二是具有成本效益。Python[2]是一门脚本语言,天生就十分的简洁,并且对数据方面的工作具有与生俱来的优势。SSM框架是由Spring+SpringMVC+MyBatis构成,用于Web项目的开发。Hadoop[3]作为开源的并行计算平台,可以使用户在不了解分布式底层细节的情况下进行相关的工作,并且它解决了两个重要的问题:大数据存储、大数据分析,即Hadoop的两大核心:HDFS和MapReduce。

1 系统设计

1.1 系统架构

系统采用Scrapy爬虫框架获取数据,并将获取的数据存入MySQL数据库中,SSM框架实现对数据库中的数据进行访问,以接口的形式与客户端之间的交互,系统架构如图1所示。

图1 系统架构图

前端采用目前流行的VUE框架来开发,VUE是一套用于构建用户界面的渐进式框架,采用MVVM设计模式(即Model-View-ViewModel),具体的架构如图2所示。

图2 MVVM架构图

Model(模型)代表内容的数据访问层,View(视图)就是用户在屏幕上看到的结构、布局和外观。相比较MVC设计模式,多出的ViewModel视图模型是MVVM模式的核心,它是连接View和Model的桥梁,能够实现从视图转化成模型,也可以实现从模型转化成视图,这就是数据的双向绑定。

1.2 系统功能模块

旅游信息聚合客户端的开发,实际上大部分是对旅游相关信息的精简“拷贝”,同时对移动终端的特点作了优化及拓展,项目涉及的相关技术包括了网站和小程序的开发,服务端网络爬虫及数据处理等。作为信息聚合客户端的网站和微信小程序,应当提供如下功能:

(1)发布的网站页面,包括用户的注册登录和评论、景点信息、住宿信息、新闻信息、游记信息等。

(2)根据用户的浏览记录,给用户推荐感兴趣的信息。

系统功能结构图如图3所示。

图3 功能结构图

1.3 数据库设计

趣潮游网站[4]涉及的表包括旅游酒店表、评论表、美食表、店铺表、新闻表和游记文章表等。其中用户表包括用户姓名、性别、图片和用户推荐关键词。访问记录表包括用户id,访问网页类型,访问目标网址,访问次数的信息。

各数据库表具体如图4所示。

图4 数据库表图

2 系统实现

2.1 网络爬虫和存储

一般网站通常具有静态的导航页面,并链接到具体信息页面,网络爬虫从导航页面开始,对网页的结构进行分析,并且编写相应的爬虫程序。爬虫的运行图如图5所示。爬虫程序是使用Scrapy[5]框架且运行在服务器上的,所以需要先在服务器安装Scrapy,具体流程如下:

(1)先利用pip下载必要的包(Twisted,bzip2)

(2)下载Scrapy并且设置环境变量

以旅游新闻推荐的爬取为例,其信息处理过程如下:

(1)服务器上通过使用crontab服务定时运行Scra⁃py脚本文件,设置的运行频率是每天一次。服务器运行爬虫时,从网页中爬取信息,存入MySQL数据库中。存入数据库后,以存入的文章作为总的文本库,从里面分割关键词并存入数据库中。

(2)HTML具有相对规范化的文本层次结构,从中提取每条潮州旅游信息中的标题、作者、来源、图片。

(3)脚本成功运行之后,在Linux自带的邮件日志中可以查看运行的情况。脚本中需要操作MySQL数据库,所以在项目中引入了MySQL包来支持数据库操作。由于有众多页面信息,不同页面的爬取频率不一,所以每一信息版块都对应数据库中的一张表。在进行重复爬取时使用scrapy_deltafetch插件进行去重,筛选掉重复的URL,实现了增量爬虫。系统运行时爬取了各类网站中的游记、新闻、景点等许多信息。

图5 爬虫运行图

2.2 PC客户端的实现

PC客户端页面开发主要采用HTML、CSS、Java Script[6]技术以及 jQuery、Bootstrap、Vue、Swiper等主流框架,其中主要采用Vue框架进行数据的双向绑定,采用前沿的AJAX、axios技术访问接口API数据。

PC客户端页面主要采用1-1-1布局,首页顶层主要是登录注销和导航栏信息,导航栏包括首页、潮州介绍、景点介绍、美食介绍和客栈介绍,中间层主要是十条最新新闻信息、类别介绍和四条热门的景点信息,底层主要是结尾图标以及客户端名称。网站页面如图6所示。潮州介绍页顶层主要是登录注销信息,中间层主要是潮州介绍的视频以及地理位置,底层主要是结尾图标以及客户端名称。景点介绍页顶层主要是登录注销信息,中间层主要是模糊查询框以及景点信息,底层主要是结尾图标以及客户端名称。美食介绍页、旅店介绍页、新闻列表页与景点介绍页结构一致。

图6 网站页面图

2.3 微信小程序的实现

小程序作为一种客户端,当前是比较受欢迎的,依托微信平台,无需下载安装就能使用。微信小程序通过微信开发者工具进行开发的,整个框架包括逻辑层、视图层和flex模型,逻辑层由JavaScript编写和实现的,视图层由WXML和WXSS配合组件构成的,flex布局可以确保页面适应不同的屏幕尺寸及设备类型。小程序自成体系,有自己的组件和API,极大地方便了开发者进行开发。项目的小程序部分,使用了组件里面的表单组件和基础内容,例如label、input、button等。API方面使用了基础、路由、界面和网络方面的内容,例如网络中微信小程序自带的wx.request。用户进入小程序和在小程序提交的事件采用axios请求后台数据,后台将数据传给小程序并显示。前后端统一了数据格式,且都以JSON格式进行交互。

小程序的首页有3个板块,顶栏是小程序的名称,顶栏下方是信息详情列表页,默认按照访问次数多少来进行信息的排序,最后一栏是一个导航栏,有三个按钮,分别是“景点”、“美食”、“客栈”和“资讯”,点击相应按钮可以进入相应的板块。其中新闻界面如图7所示,景点界面如图8所示。

图7 新闻界面图

图8 景点界面图

2.4 推荐功能的实现

用户浏览的数据来源于数据库中的日志记录,且将其中的记录写入到txt文本文件中,作为推荐算法实现的输入条件。记录的文本内容格式如下:

[time:2019/07/25 11:09:11][sip:www.quchaoyou.cn][method:POST][url:https://www.quchaoyou.cn/travelInfo/travelInfoById.action][uip:113.82.145.144][agent:Mozil⁃la/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/75.0.3770.100 Safa⁃ri/537.36]用户:1234浏览指定新闻页面 id:1408。

算法的实现思路[7]:

(1)后端根据用户名从用户表中获取用户读过的文章id(后十条,重复的id需过滤掉)

(2)然后根据id从新闻表中得到关键词

(3)利用得到的关键词,在关键词表中筛选出关键词频度最高的一个

(4)利用关键词查询出相应的文章,需要判断是否是读过的文章,过滤掉读过的文章然后其余的就推荐给用户

脚本运行的代码如下:

#!/bin/bash

/usr/local/apache-tomcat-9.0.14/bin/shutdown.sh

/home/hadoop/hadoop3.2/sbin/start-all.sh

/home/hadoop/hadoop3.2/bin/hdfs dfsadmin-safemode leave

/home/hadoop/hadoop3.2/bin/hdfs dfs-rm-r/user/output jar

/home/hadoop/hadoop3.2/share/hadoop/tools/lib/hadoop-stream⁃ing-3.2.0.jar

-file/opt/python/mapper.py

-mapper"/root/Py37/bin/python3/opt/python/mapper.py"

-file/opt/python/reducer.py

-reducer"/root/Py37/bin/python3/opt/python/reducer.py"

-input/user/input/sql_txt.txt

-output/user/output

/usr/local/apache-tomcat-9.0.14/bin/startup.sh

/home/hadoop/hadoop3.2/sbin/stop-all.sh

如图9所示。

图9 推荐脚本运行图

3 结语

项目对旅游相关的信息进行了聚合,并且提供了网页和微信小程序两种客户端表现形式。用户登录之后,系统对用户的行为进行了记录,保存在日志文件和数据库中,为推荐功能的实现提供数据。为了让项目的数据量更加多,爬虫方面的代码需要进行调整,这是下一步努力的方向。