




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科论文目录TOC\o"1-3"\h\u摘要 IAbstract II引言 11关键理论与技术 31.1框架技术 31.1.1QueryList 31.1.2ThinkPHP 31.1.3AmazeUI 31.2数据可视化技术 41.3数据库技术 41.4本章小结 42需求分析 52.1业务流程分析 52.2功能需求分析 52.3用例分析 72.4非功能性需求 92.5本章小结 103系统设计 113.1系统总体结构 113.2系统功能模块设计 113.2.1首页 113.2.2数据统计模块 123.2.3攻略库模块设计 123.2.4个人中心模块 133.2.5采集管理模块 143.2.6系统管理模块 143.2.7日志管理模块 153.3系统数据库设计 153.4本章小结 164系统实现 174.1系统实现概述 174.1.1开发环境 174.1.2用户环境 174.2数据库实现 174.3系统各部分功能模块实现 194.3.1首页 194.3.2数据统计模块 204.3.3攻略库模块 224.3.4个人中心模块 244.3.5采集管理模块 254.3.6日志管理模块 274.4本章小结 285系统测试 295.1功能测试 295.2压力测试 295.3本章小结 30结论 31致谢 32参考文献 33本科论文摘要世界旅游组织对旅游业进行了预测,称在未来20年里该行业将持续呈上升趋势。同时,越来越多的旅游用户也面临着出行选择和旅游规划的问题。面对林林总总的景点选择,用户考虑的因素也随之增加,比如时间、景点热度、价格、景点位置、交通等,选择一个合适且满意的景点将会耗费用户大量的时间和精力。基于PHP的景点数据分析系统的开发,可以从海量的旅游景点中为用户提供个性化的景点数据展示服务,从而提高旅游质量。本文主要以景点数据分析为展开点,利用PHP采集框架QueryList爬取“去哪儿?”官方网站的热门景点地理位置、门票价格、热度、销量以及热门游记等重要数据信息,分析爬取到的景点数据的价值,通过Highcharts等技术开发具有可视化界面的景点数据分析系统,制作包括但不限于旅游日历、景点销量排行、景点分类等数据图表,使游客能够通过可视化界面与该系统进行交互,方便用户进行个性化的决策,并使用轻量级PHP开发框架ThinkPHP构建景点数据分析系统,通过分析本系统中的用户角色,确定用户的等级分类,确保该系统能实现不同等级的用户的基础需求,比如登录、注册、用户信息修改、用户收藏景点、景点搜索、设置等多项功能。该系统是一个为有旅游需求的用户提供的景点数据分析系统。在经过测试后,完成了对数据采集、数据分析、数据展示和信息管理的实现,达到了预期效果。关键词:数据采集;数据可视化;信息管理;景点数据
AbstractTheworldtourismorganizationhasforecastthattheindustrywillcontinuetogrowoverthenext20years.Atthesametime,moreandmoretravelusersarealsofacingtheproblemoftravelchoiceandtravelplanning.Inthefaceofavarietyofscenicspots,userswillconsidermorefactors,suchastime,heat,price,location,transportation,etc.Choosingasuitableandsatisfactoryscenicspotwillconsumeusersalotoftimeandenergy.ThedevelopmentofthescenicspotdataanalysissystembasedonPHPcanprovideuserswithpersonalizedscenicspotdatadisplayservicefromalargenumberofscenicspots,thusimprovingthequalityoftourism.Inthispaper,scenicspotdataanalysisismainlyusedastheexpansionpoint,andthePHPcollectionframeworkQueryListisusedtoclimbthe"wheretogo?"Theofficialwebsiteofthehotspotsofthegeographicalposition,theticketprice,thesalesvolumeofheat,aswellaspopulartravelnotes,andotherimportantdatainformation,analysisofcrawltothevalueofscenicspotsdata,throughtheHighchartstechnologydevelopment,suchasthescenicspotdataanalysissystemwithvisualinterface,makeincludingbutnotlimitedto,travelcalendar,attractionsrankedsalesdatachart,attractionsclassification,visitorscaninteractwiththesystemthroughavisualinterface,convenientuserpersonalizeddecisions,andusinglightweightPHPframeworkThinkPHPbuildattractionsdataanalysissystem,byanalyzingtheuserrolesinthissystem,Determinetheuserlevelclassification,toensurethatthesystemcanachievethebasicneedsofusersofdifferentlevels,suchaslogin,registration,userinformationmodification,userfavoriteattractions,scenicspotsearch,Settingsandotherfunctions.Thesystemisascenicspotdataanalysissystemforuserswithtourismneeds.Afterthetest,therealizationofdatacollection,dataanalysis,datadisplayandinformationmanagementwascompleted,andtheexpectedresultswereachieved.Keywords:datacollection;data
visualization;informationmanagement;scenicspotdata引言目前,通过对国内的主流旅游网站仔细观察和调研结果发现来看,国内旅游网站大都定位于为用户提供住宿、门票等产品的预定服务,以及旅游景点相关信息的介绍方面REF_Ref3145\w\h[1],并没有综合性景点数据分析服务。在这种环境中,用户在选择景点时将会耗费大量时间和精力,从而降低了信息获取的效率和影响了旅游体验,这样一来,游客不能在较短时间内快速选择出满意的出行景点,并且游客在旅游过程中个性化的信息需求也很难得到满足REF_Ref6165\w\h[2]。针对这一现状,促进旅游信息化发展的景点数据分析系统应运而生。景点数据分析系统通过数据可视化技术,开发具有可视化界面的景点数据分析系统REF_Ref8135\w\h[3],使游客用户能够通过可视化界面与系统进行交互,进行个性化旅游景点数据分析结果展示,方便了用户快速定位自己感兴趣的信息。将该系统打造为一个集数据采集、数据分析、数据展示和信息管理于一体的系统,以游客为核心,展示景点数据分析结果,并在系统内及时发布景点、游记等信息,让游客主动感知并能及时了解这些有关旅游的信息,从而达到更加便于自助游的效果。景点数据分析系统避免了传统旅游网站的以下普遍特性:几乎都只是旅游信息与互联网的简单结合,只方便游客浏览各种景点信息,并没有将景点等数据加以综合性的分析进而显示数据分析结果。游客在浏览景点时还需要自行将各大景点进行对比工作,这样降低了游客的使用体验,而且游客自行的比较结果有可能出现较大偏差,导致在后续的旅游行程中不如人意。景点数据分析系统不仅可以提供给用户浏览各种景点信息的功能,而且很直观明了的将各种景点数据对比结果展示在用户眼前,用户可直接通过数据分析结果来做出个性化决策,省时省力,而且由于数据量大,数据分析结果比用户自行对比结果更为精确可靠,从而提高用户的使用体验和旅游体验。针对国内景点和有旅游需求的用户,景点数据分析系统重点解决了以下问题:1、分析旅游网站的数据价值,选取景点、旅游城市等方面的数据信息,通过数据采集技术来抓取这些数据信息,使得系统里数据量丰富且蕴含实际意义,解决了常规景点数据分析中数据来源单一、数据量小的问题。2、通过可视化技术,以图表形式将数据分析结果展示出来,开发具有可视化界面的景点数据分析系统,使得用户能直观明了的观察和对比各项景点数据,最终选择出一个合适的旅游景点,解决了常规文字形式旅游数据难以被游客了解且信息不全面的问题。3、构建用户信息管理系统,以满足各类型用户的基础需求,比如修改个人信息、收藏景点等。本文的工作就是为了满足有旅游计划的用户而量身定制的,具体分析了各类用户的需求,描述了景点数据分析系统的功能结构,按照系统开发流程对该系统进行设计进而实现该系统的所有功能,并对系统进行测试工作。本文的章节安排如下:第一章关键理论与技术。依次介绍本系统所使用的核心技术,通过对理论知识的学习和积累,为后续系统的设计和开发做铺垫。第二章需求分析。介绍参与本系统中的主要用户角色分类,逐一分析各类不同角色用户的需求,并总结需求。第三章系统设计。根据需求分析对系统结构等进行设计,包括数据库和功能模块的设计。第四章系统实现。展示和说明系统实现的效果,采用功能描述和项目抓图的方式,列举系统内部分功能的具体实现。并包含开发环境、数据库等实现。第五章系统测试。按次序测试系统内各个模块的功能是否达到预期效果,展示系统部分功能的测试结果,对测试结果进行说明。
1关键理论与技术1.1框架技术1.1.1QueryList该系统最主要的技术之一就是采集技术,即根据给定的旅游网站的网址与制定的规则,按照约定格式提取所需的景点数据REF_Ref8520\w\h[4]。PHP还提供了snoopy、simple_html_dom、socket等数据采集方法,但由于QueryList不是利用复杂的正则表达式来采集,而是根据CSS选择器来进行数据的采集,完全模块化的设计,使得采集代码雅观且易维护,并且提供了丰富的多线程、图片下载等功能插件。QueryList无需依靠框架和架构,在项目根目录使用composer命令即可安装,使用前只需导入自动加载文件和QueryList类,可单独使用也可引入任意PHP开发框架中,使得语法简洁且可扩展性强。针对表格采集和递归多级列表采集,分别采用伪选择器和在getData方法里多次调用QueryList即可实现,简单易懂。1.1.2ThinkPHPThinkPHP是快速且简单的基于MVC和面向对象的轻量级PHP开发框架REF_Ref8993\w\h[5],为了简化企业级应用开发和敏捷Web应用开发而诞生REF_Ref9020\w\h[6]。ThinkPHP具有详细日志信息、严格的错误检测与安全机制,便于开发过程中处理和解决各种疑难杂症。ThinkPHP不仅可以帮助开发人员快速开发,而且可以提高应用稳定性。ThinkPHP支持composer和PHPunit等,这源于ThinkPHP的扩展机制,便于queryList等其他框架的下载使用,使得扩展更为灵活方便。可对数据库可进行链式操作,比起SQL语句,链式操作更为简捷高效。这都为WEB应用开发提供了强有力的支持。目前,ThinkPHP框架大体分为ThinkPHP3版和ThinkPHP5版两类REF_Ref9186\w\h[7],这两种版本里,ThinkPHP5.1对接口更加亲切,页面也更加新颖,因此我选择使用ThinkPHP5.1来开发本设计。1.1.3AmazeUIAmazeUI含多个CSS组件、JS组件和不同主题的Web组件。它拥有的UA识别技术即浏览器标识可以自动识别客户端的操作系统及版本、浏览器及版本等,从而判断用户是Web端还是移动端,使得网页自适应客户端。它含有的懒加载技术使用延迟加载在可提高网页下载速度,从而减轻服务器负载。拥有丰富的图标库和表单提示等组件,可自行进行排版设计,使得界面更加美观且保证系统界面的一致性。1.2数据可视化技术本项目所采用了Highcharts和ECharts两种数据可视化技术REF_Ref9385\w\h[8]。Highcharts是基于Jquery框架开发的图表库,包含了HighchartsJS、HighstockJS和HighmapsJS三款软件REF_Ref9460\w\h[9]。操作灵活简单,只需引入相关图表的JS文件并设置配置项,即可使用Highcharts在页面快速绘制具有交互性的图表。含有条形图、折线图等众多类型的图表,图表类型丰富且多元化,每个图表还可进行全屏显示,并且许多不同类型的图表可以集成在同一个图形中形成混合图REF_Ref9483\w\h[10]。图表组件样式全面且精美,可以根据需求灵活设置图表背景颜色、文字样式等,使得图表内容丰富且美观。提供了将图表转化为各类型图片和Excel并下载的功能,由此可比较不同数据量阶段的趋势变化等。ECharts是百度推出的可视化开源开发框架REF_Ref9676\w\h[11]。底层依赖轻量级的矢量图形库ZRenderREF_Ref9751\w\h[12],主要的图表绘制方式为Canvas绘图,提供直观的数据可视化图表库REF_Ref9790\w\h[13]。它拥有拖拽重计算、数据视图等特性,这些创新的特性增强了用户体验并赋予了用户对数据进行挖掘、整合的能力REF_Ref10019\w\h[14]。只需简单引入相关图表的JS文件并设置配置项,就可以灵活的控制数据展示形式和视觉效果,操作简单灵活。可添加图表标注和说明等组件,使得数据形式美观、可读性强。1.3数据库技术MySQL是一个开放源码的轻量级关系型数据库REF_Ref10055\w\h[15]。MySQL由于其免费、维护简单、使用成本低等特点被越来越多地应用到web类服务器中REF_Ref10127\w\h[16]。MySQL数据库是以“C/S”模式实现的,由于该数据库的运行效率很高且开源的特性,正好弥补了中小数据库市场的空白。MySQL中含有的5种索引能加快查询速度、提升查询效率。使用workbench数据库工具,无需依靠命令行操作,操作起来更加方便。1.4本章小结本章主要描述了实现该系统采用的核心技术,包括QueryList、ThinkPHP、Highcharts、ECharts、MySQL等,从应用的前台框架到后端应用,包括数据库技术、采集技术、数据可视化等都有详细描述。
2需求分析2.1业务流程分析景点数据分析系统系统首先需要进行采集工作,即对“去哪儿?”官方网站的旅游景点数据进行抓取。通过对采集的景点数据进行分析之后存储到数据库中,并把存储到数据库的数据根据需求进行不同处理,将分析处理后的数据分别展示到前端页面适宜的图表中,同时实现系统内部的各项信息管理功能。由此就能构成一个集数据采集、数据分析、数据展示和信息管理于一体的系统,本系统的业务流程如图2.1所示。图2.1“景点数据分析系统”业务流程图流程中信息管理部分分为普通用户和系统管理员两种不同登录身份,该系统必须登录之后才能使用。普通用户可以对个人信息进行管理并查看景点数据分析结果;系统管理员不仅拥有普通用户的权限而且可以对数据采集、日志及整个系统的管理。通过这四部分的关联,就可以完整的展现出系统的基本结构。2.2功能需求分析本系统是一个针对有出行旅游需求的用户而设计的系统,通过对这个群体进行调研和实际观察,深入地剖析了有关该群体的特点,最后确定将该系统的用户分为普通用户和管理员两种角色。针对这两种角色,在各项权限方面,系统管理员高于普通用户,普通用户拥有的权限系统管理员同样拥有,比如浏览数据分析结果等。而系统管理员能访问的页面、拥有的权限等普通用户不一定可以访问或拥有,因为整个系统是交由系统管理员来统一管理的,这样一来,系统角色分工明确,层次将更加清晰,利于系统的维护和管理。系统为普通用户提供的功能。系统的新用户需要注册一个新账号才能称为本系统的成员;用户成为本系统的新成员后,可通过注册时填写用户名和密码进行登录;用户必须在登录之后才能访问本系统;当用户想要退出该系统时,选择“退出”功能即可实现;修改个人信息是指用户可修改注册时填写的个人信息或个人资料;浏览首页是指用户在登录后可以访问首页数据。除此之外,还提供给用户个人中心、数据统计和攻略库三个模块的功能。个人中心模块。用户可以根据出行习惯或爱好填写关于旅游出行的问卷调查,并且在该页面下方,会以图表形式统计出问卷调查的分析结果;修改问卷调查是指用户可以修改之前填写的问卷调查的内容;用户可根据自己最近的出行计划填写行程计划,并选择是否公开该行程计划;用户可根据自身需要对自己的行程计划进行删改和查询;用户可浏览系统发布的公告消息,还可根据消息标题或时间对公告消息进行查询;用户可浏览自己收藏的所有景点,并且可对收藏的景点按照指定排序方式进行排序和根据景点名或景点地址查询。数据统计模块。浏览数据统计是指用户可以查看景点数据分析结果,包括旅游日历、景点分析、游记分析等页面;还可在某些图表里对景点或城市进行搜索,查看该景点或城市的某些数据分析结果。攻略库模块。查看攻略库是指用户可以访问攻略库模块下的界面,包括景点数据、游记数据和行程计划,其中行程计划是指用户公开的行程计划;查询景点信息是指用户可以查询想要搜索的景点信息;景点信息排序是指用户可以根据指定的排序方式对景点数据进行排序;收藏景点是指用户可以收藏自己感兴趣的景点,当然也可取消收藏已经失去兴趣的景点;查询景点信息是指用户在游记数据页面,查询用户想要搜索的游记信息;游记信息排序是指用户可以根据指定的排序方式对游记数据进行排序;查询行程计划是指用户可在攻略库模块下的行程计划页面,根据景点或出发时间查询公开的行程计划。系统为系统管理员提供了采集管理、系统管理和日志管理,除此之外管理员还可以查看系统访问人数和系统当日的登录人数。采集管理是指管理员可以制定采集规则来对本系统所需要的数据进行采集,并且每采集一次就记录一次,将采集规则、时间、类型等信息都记录下来。管理员可以根据采集时间对采集记录进行查询。系统管理包括用户信息管理和公告消息管理。用户信息管理是指用户可以查看系统所有用户的个人信息,可初始化某个用户的登录密码,也可将普通用户的权限升级成系统管理员。公告消息管理是指管理员可以发布公告消息,也可对公告消息进行删除或查询。日志管理是指管理员可以浏览并查询邮件发送日志记录、文件上传日志记录、密码修改日志记录、采集日志记录。2.3用例分析该系统设计了普通用户和系统管理员两类角色,均可启动用户功能用例包含的常规系统基本功能。此外,普通用户可访问首页、个人中心、数据统计模块,而系统管理员除了普通用户的可访问的模块外,还可以访问采集管理、日志管理和系统管理,如图2.2所示。图2.2“景点数据分析系统”总体用例图其中,普通用户除了可进行注册、登录、注销和修改密码等基础功能之外,还可进行浏览景点数据分析结果、浏览和查询公告消息、发布和删改行程计划、填写和修改问卷调查、收藏和取消收藏景点等功能,如图2.3所示,由图可知,除了注册功能,其余普通用户功能都必须是在登录状态下才可实现。图2.3“景点数据分析系统”普通用户用例图管理员除了拥有用户用户的所有功能之外,还可自行制定采集规则对景点数据进行采集、浏览日志信息、初始化用户密码、设置系统管理员等功能,如图2.4所示,由图可知,管理员特有功能也都必须是在登录状态下才可实现。图2.4“景点数据分析系统”系统管理员用例图由以上的用例图可知,在系统的7个模块中,个人中心可以扩展出行程计划、收藏、问卷调查、公告消息等;系统管理可以扩展出设置管理员、初始化用户密码、发布公告消息、删除公告消息等;采集管理包含了采集数据,扩展了查询采集日志记录;攻略库扩展了对景点信息和游记数据的排序与查询等。每个用例包含或扩展了许多不同功能,具体如表2.1所示。表2.1“景点数据分析系统”用例表用例名称用例关系用例名称角色发布行程计划扩展个人中心用户、管理员删改查行程计划扩展个人中心用户、管理员浏览行程计划包含个人中心用户、管理员修改问卷调查扩展个人中心用户、管理员填写问卷调查扩展个人中心用户、管理员浏览问卷调查包含个人中心用户、管理员浏览问卷调查结果分析包含个人中心用户、管理员查询公告消息扩展个人中心用户、管理员浏览公告消息包含个人中心用户、管理员排序、查询收藏景点扩展个人中心用户、管理员浏览查询收藏景点包含个人中心用户、管理员取消收藏景点扩展个人中心用户、管理员采集数据包含采集管理管理员查询采集日志记录扩展采集管理管理员设置管理员扩展系统管理管理员初始化用户密码扩展系统管理管理员查看用户信息包含系统管理管理员发布、删除公告消息扩展系统管理管理员浏览公告消息包含系统管理管理员浏览各类日志信息包含日志管理管理员查询各类日志信息扩展日志管理管理员浏览景点数据包含攻略库用户、管理员浏览游记数据包含攻略库用户、管理员排序、查询景点数据扩展攻略库用户、管理员排序、查询游记数据扩展攻略库用户、管理员收藏、取消收藏景点扩展攻略库用户、管理员浏览所有公开的行程计划扩展攻略库用户、管理员查询公开的行程计划扩展攻略库用户、管理员旅游日历包含数据统计用户、管理员景点分析包含数据统计用户、管理员游记分析包含数据统计用户、管理员搜索某个城市的热门景点扩展数据统计用户、管理员显示当前系统定位和时间包含首页用户、管理员显示当前数据库内各项景点数据量包含首页用户、管理员在地图图表上显示旅游城市数据包含首页用户、管理员2.4非功能性需求非功能性需求,指的是信息系统中保证性能、系统可靠性、可扩展性要求等方面相应的需求要素REF_Ref10274\w\h[17]。纵观景点数据分析系统,为了使用户有良好的使用性和用户体验,本系统也做了许多非功能性需求,比如系统响应时间、数据分析结果精度、系统友好性等。该系统为了让用户使用起来操作简单,无需采用复杂的显示方式来进行数据展示,采用浏览器来达到高效显示和使用。无论是web浏览器或是移动端浏览器均可兼容显示,这样使得用户使用起来得心应手。为了提升用户的使用体验和系统的友好性,该系统设计了很多用户提示信息,帮助和提示用户进行功能性操作,不会让用户在操作不当是产生无助或烦躁情绪。并且为了界面美观和照顾用户使用本系统时的心情,本系统在开发时选用意义明确的图标和色彩鲜明的提示,页面简洁明了,搜索框位置统一且明显,表格风格统一。在系统做数据分析时,当数据量越多,景点数据分析的结果就越精确。为了提高系统数据分析的结果精度,需要尽可能多地采集相关景点数据。正是因为需要保证结果精度,所以本系统的数据量相对较大,在查询分析结果时,系统响应速度可能会响应的变慢,为了达到用户在系统响应速度方面的需求,显示数据分析结果时,对不同类型的数据分析结果进行分模块显示,这样一来,能提高系统响应的速度并且减小服务器的压力。为了验证用户身份的可靠性,用户的邮箱数据不能为空且是唯一的。在注册系统用户时,给用户注册的邮箱里发送激活邮件,用户需要点击该激活链接进入系统进行激活账号操作,激活成功才算是注册成功,否则未激活账号的用户也是不能登录该系统的。相应的,用户修改个人信息的邮箱信息时,也是需要向新修改的邮箱里发送验证链接,点击该链接进入系统进行重新绑定邮箱的操作,这样才进行数据库更新操作,更新成功才算是修改成功,否则不能修改成功。2.5本章小结本章主要讲述了景点数据分析系统的功能需求分析、用例描述和非功能需求等,简述了不同角色进入系统后,可进行不同操作的工作流程。由以上分析可知,除了注册功能,该系统的其他所有功能都必须是在登录状态下才可进行操作,不同角色的用户分别对应着不同的功能操作,使得系统层次分明、功能清晰。
3系统设计3.1系统总体结构通过系统内部用户身份的不同来构建功能结构,分别分析不同用户身份登录状态下系统可实现的功能。景点数据分析系统的功能结构图如图3.1所示。图3.1系统功能结构图由图3.1系统的功能结构图可以看出,该系统存在普通用户和管理员两种身份,功能模块分别为首页、数据统计、攻略库、个人中心、采集管理、日志管理、系统管理七大模块,并包含登录、注册、忘记密码、修改个人信息、统计当日登录人数和访问人数等功能。该系统必须登录之后才能使用,普通用户可以浏览首页、数据统计、攻略库和使用个人中心四个模块。系统管理、日志管理、采集管理、查看系统访问人数和当日登录人数只提供给系统管理员使用。3.2系统功能模块设计3.2.1首页用户登录成功后,即可访问系统首页。系统首页显示了当前定位、系统时间、当前系统内所含的景点数据量和景点地图等景点数据信息,首页的时序分析如图3.2所示。普通用户和系统管理员是共用首页界面的,只是根据权限的不同,显示的内容有细微的差别。如果由登录提交来的用户权限是普通用户,则不显示采集管理、日志管理、系统管理三个模块,并且不显示统计的当日登录数量和系统访问总人数。图3.2首页时序图3.2.2数据统计模块数据统计模块主要包括了旅游日历、景点分析、游记分析三个部分的图表展示。在进行图表展示之前,需要对采集来的数据进行综合分析,思考数据应该怎样展示才能更直观明了的被人理解和接收REF_Ref10450\w\h[18]。图3.3为数据展示时序图,数据展示是将上述数据分析的结果直接以图表的形式展现出来,为用户提供可视化的界面,进行个性化旅游景点数据分析。该模块主要展示了旅游日历展示、月销量top10景点展示等。图3.3数据统计之数据展示时序图3.2.3攻略库模块设计攻略库模块也是数据展示的一部分,即将系统中的数据信息进行前端展示的过程。将短时间内不会更改的数据直接显示到攻略库模块。因此攻略库模块包括景点景区、精选游记和行程计划三部分部分内容,是展示当前系统景点数据、游记数据和行程计划数据,其中行程计划是由该系统的用户发布的未来的出行计划,展示这部分内容是提供给其他用户关于旅游的新思路与新选择,方便用户进行个性化的决策。下面将以景区景点数据为例来对攻略库模块的功能设计进行讲解。在景点景区页面,将分页显示系统数据库内所有的景点数据信息,包括但不限于景点名、景点地址、景点图片、景点月销量、景点热度等信息。在此页面,用户可以按自己的需求对景点数据进行排序,系统提供了热度、月销量、最低花销三种排序方式,分别按照热度由高到低、月销量由高到低、最低花销由低到高排序;用户可以根据已知景点名或景点地址对景点信息进行查询操作;用户也可以收藏自己感兴趣的景点,或者取消收藏已经失去旅游兴趣的景点。景点景区模块的时序图如图3.4所示。图3.4景区景点模块时序图3.2.4个人中心模块个人中心模块分别包含了问卷调查、行程计划、消息列表和收藏四个小模块。问卷调查模块包括对问卷调查的填写、显示、修改、浏览问卷调查分析结果等;行程计划模块包括对用户个人的行程计划的发布、修改、显示、删除、查询等;消息列表模块包含对公告消息的显示、查询等;收藏模块需要显示用户个人所收藏的所有景点数据信息,包含景点数据的排序、查询和取消收藏等。以下将以行程计划模块为例对个人中心模块功能设计进行讲解。在行程计划页面,将分页显示用户个人所发布的所有行程计划信息,包括但不限于景点名、出发时间、发布时间、人物、预计费用等信息。在此页面,用户可以选择景点、填写出发时间和预计费用等信息发布行程计划;用户可以删除发布过的行程计划;用户可以选择某条行程计划修改该行程计划的内容,包括景点、状态等;用户也可以根据景点或出发时间查询相关行程计划信息。行程计划模块如图3.5所示。图3.5行程计划模块时序图3.2.5采集管理模块采集管理模块包括对城市、游记、景点等数据的采集,以采集景点数据为例进行说明。在采集景点数据页面,将分页显示之前每一次采集景点数据的记录,包括但不限于更新数量、当前系统景点总数量、采集总耗时、采集关键词、采集城市名和采集景点主题等信息。在此页面,管理员可以选择采集关键字、采集城市、采集主题信息来制定采集策略并进行景点数据的采集操作;管理员也可以根据采集时间来对景点数据采集日志进行查询。采集城市数据时序图如图3.6所示。图3.6采集景点数据时序图3.2.6系统管理模块系统管理模块主要是对用户信息和公告消息进行管理。用户信息管理包含显示、查询用户信息以及初始化用户密码和设置管理员等功能;公告消息包含对公告消息的发布、删除、查看详情、查询等功能。下面将以用户信息管理为例对系统管理模块功能设计进行讲解。在用户信息管理页面,将分页显示该系统所有用户的信息,包括但不限于登录名、密码、邮箱、性别手机号、所在地等信息。在此页面,管理员可以根据用户名或邮箱对用户信息进行查询;管理员也可以选定某个用户,查看该用户的详细信息。在用户信息详情页面,管理员可初始化密码;管理员也可以修改该用户的等级状态,将普通用户升级为系统管理员。用户信息管理时序图如图3.7所示。图3.7查询用户数据时序图3.2.7日志管理模块日志管理模块包括上传日志、邮箱日志、采集日志等,以邮箱日志管理为例进行说明。在系统触发发送邮件的功能后,例如重新绑定邮箱、注册激活账号和忘记密码等功能时,系统会记录每一次发送邮件的时间、收件人、内容等。管理员在邮箱日志管理页面可以根据邮件类型、收件人、发送时间来查询某条具体的邮箱记录日志信息,查询邮箱日志时序图如图3.8所示。图3.8查询邮箱日志时序图3.3系统数据库设计景点数据分析系统的实体关系图如图3.9所示。由图可知,该系统一共设计了21个实体,其中有1个1对1关系、23个1对多关系。表3.1展示了该系统所需要设计的21张表以及对应的描述。图3.9景点数据分析系统的实体关系图表3.1景点数据分析系统数据库总设计编号表名描述01travel_qunar_calendar采集去哪儿旅行日历数据表02travel_qunar_city采集去哪儿全部旅行目的地推荐(城市)表03travel_qunar_notes采集去哪儿游记数据表04travel_qunar_scenic采集去哪儿旅行景点表05travel_spider_log采集日志表06travel_collection用户收藏记录表07travel_email_log发送邮箱日志记录表08travel_email_reset邮箱重置日志表09travel_message公告消息表10travel_plan行程计划表11travel_questionnaire用户的问卷调查表12travel_qunar_scenic_detail景点标签表13travel_scenic_subject景点主题表14travel_spider_calendar旅游日历爬虫日志表15travel_spider_city旅游城市爬虫日志表16travel_spider_notes游记爬虫日志表17travel_spider_scenic景点爬虫日志表18travel_upload_log上传文件记录表19travel_user用户表20travel_user_login用户登录次数记录表21travel_user_reset用户重置密码记录表3.4本章小结本章主要是进行整个系统的设计工作,包括对系统总体、功能模块和数据库的设计,这是后续系统实现的基础。该章应用功能结构图、用例图、时序图对功能模块的设计进行说明,并列出实现该系统所需的数据表以及每个数据表所对应的功能。
4系统实现4.1系统实现概述4.1.1开发环境系统的开发环境是一个非常重要的因素,本系统所依赖的操作系统是Windows10,数据库为MySQL5.7,开发语言为PHP7.0.4,处理器为i7,另外使用的开发工具PHPStorm和Web服务器Apache2.4.18。通过使用这些技术并结合第2章所提到的相关关键技术框架来完成景点数据分析系统,保证每个功能模块和对应的子功能都能够正常使用。4.1.2用户环境为了能够精准实现景点数据分析系统的每一个功能操作,用户环境起着决定性作用。为了能更好的的使用该系统,建议在以下用户环境中操作该系统。服务器硬件方面:i5以上处理器;大于512MB的内存;大于40G的硬盘。服务器软件方面:Windows10系统;MySQL数据库服务器;Apache2.0或以上版本的Web服务器。客服端软件方面:Windows系统;FireFox76.0以上或GoogleChrome81.0以上的浏览器;PHPStorm2018.2以上版本的开发工具。4.2数据库实现由本文的3.3章节可知,为了该系统的连贯性以及合理性,至少需要创建21张表。下面针对数据库实现部分介绍数据库中比较重要的核心数据表,逻辑结构如表4.1至表4.4所示,主要介绍核心数据表内的字段名、数据类型、约束条件和字段描述等内容。城市采集数据表即travel_qunar_city如表4.1所示,该表用于存储从“去哪儿”旅游网站采集到的城市数据,表中共有5个字段,其中href指去哪儿网站中介绍该城市详情页的链接。表4.1城市采集数据表字段名数据类型(精度范围)空/非空约束条件其它说明cidINT(11)非空主键约束,非空约束自增长areaVARCHAR(45)非空非空约束区域provinceVARCHAR(45)非空非空约束省份cityVARCHAR(45)非空非空约束城市hrefVARCHAR(100)非空非空约束城市链接旅行日历采集数据表即travel_qunar_calendar如表4.2所示,该表用于存储从“去哪儿”旅游网站采集到的旅行日历数据,表中共有5个字段,其中href指去哪儿网站中介绍该城市详情页的链接。表4.2旅行日历采集数据表字段名数据类型(精度范围)空/非空约束条件其它说明caidINT(11)非空主键约束,非空约束自增长calendarINT(11)非空非空约束月份cityVARCHAR(45)非空非空约束城市areaVARCHAR(45)非空非空约束区域hrefVARCHAR(100)非空非空约束城市链接游记采集数据表即travel_qunar_notes如表4.3所示,该表用于存储从“去哪儿”旅游网站采集到的游记数据,表中共有14个字段,其中href指去哪儿网站中介绍该游记详情页的链接。表4.3游记采集数据表字段名数据类型(精度范围)空/非空约束条件其它说明nidINT(11)非空主键约束,非空约束自增长titleVARCHAR(255)非空非空约束标题hrefVARCHAR(100)非空非空约束游记链接city_nameVARCHAR(100)非空非空约束游玩城市daysVARCHAR(255)非空非空约束游玩天数feeINT(11)非空非空约束人均费用tripVARCHAR(255)非空非空约束游玩方式peopleVARCHAR(10)非空非空约束人物placesVARCHAR(255)非空非空约束景点名称start_dateVARCHAR(50)非空非空约束出发时间readingINT(8)非空非空约束阅读量like_numINT(8)非空非空约束点赞量commentINT(8)非空非空约束评论量monthVARCHAR(45)非空非空约束出行月份景点采集数据表即travel_qunar_scenic如表4.4所示,该表用于存储从“去哪儿”旅游网站采集到的景点数据,表中共有11个字段,其中href指去哪儿网站中介绍该景点详情页的链接,picture指的是采集的该景点的图片信息。表4.4景点采集数据表字段名数据类型(精度范围)空/非空约束条件其它说明sidINT(11)非空主键约束,非空约束自增长scenic_nameVARCHAR(50)非空非空约束景点名cityVARCHAR(45)非空非空约束所在城市siteVARCHAR(255)非空非空约束详细地址levelVARCHAR(20)非空非空约束景区等级hotFLOAT非空非空约束热度monthly_salesINT(11)非空非空约束月销量floor_costFLOAT非空非空约束最低花销pictureVARCHAR(255)非空非空约束图片scenic_introductionVARCHAR(255)非空非空约束景点简介hrefTEXT非空非空约束景点链接4.3系统各部分功能模块实现4.3.1首页用户进入本系统并且登录成功后,即可进入首页,首页显示登录用户当前定位、系统当前时间、系统当前所含各种爬取的数据数量,比如景点数量、游记数量等,最重要的是显示国内地图,并在地图上的每个省份标注了当前各自比较热门的旅游城市及数量。如果是普通用户,左侧菜单栏只能显示首页、数据统计、攻略库和个人中心四个模块,导航栏只显示用户信息及公告信息数量。如果是系统管理员,左侧菜单栏还要显示采集管理、系统管理、日志管理三个模块,并且导航栏还显示了系统总访问人数及当日用户登录数,如图4.1所示。图4.1系统管理员首页实现首页的核心代码,主要是介绍在后台查询城市景点导航部分每个省份所要显示的景点城市数据,并将这些数据进行封装返回给前端页面。publicfunctioncityMap(){
$result=array();//用于存储查询到的城市
$count=array();//用于存储查询到的城市数量
$province=db('qunar_city')
->group('province')
->field('province')
->select();
foreach($provinceas$province_key=>&$province_value){//循环遍历省份
$city_map['province']=['in',$province_value['province']];
$city=db('qunar_city')->where($city_map)->field('province,city')
->select();
$total=db('qunar_city')
->where($city_map)
->field('count(city)astotal')
->select();
foreach($cityas$city_key=>&$city_value){//循环遍历城市
$result[$city_value['province']][]=$city_value['city'];
}
foreach($totalas$total_key=>&$total_value){
$count[]=$total_value['total'];
}
}
$this->assign('count',json_encode($count));
$this->assign('province',json_encode(array_keys($result)));
$this->assign('city',json_encode(array_values($result)));
}4.3.2数据统计模块以旅行日历分析为例来说明数据统计模块的实现。旅行日历一共包含四个图表,均采用highCharts技术进行实现。其中包括城市旅游月份分析、部分法定节假日出行百分比、五一节出行城市Top10、国庆节出行城市Top10,如图4.2和图4.3所示,其中城市旅游月份分析图表可进行折线图、柱状图和面积图的转换,并且系统内的每个图表均有将图表转换成各类型格式的图片和Excel下载的功能,且可将图表全屏显示。图4.2旅行日历实现一图4.3旅行日历实现二旅行日历分析的核心代码,主要介绍了在后台查询每个月份的适宜旅游城市总数、不同节假日出行总数统计等,并将这些数据进行封装返回给前端页面。publicfunctiontravelCalendar(){
$calendar=db('qunar_calendar')
->group('calendar')->field('count(city)astotal')
->select();//查询城市总数量
$count=array_column($calendar,'total');//返回输入数组中total列的值
$this->assign('travel_calendar_count',json_encode($count));
}publicfunctiontravelVocation(){
$travelVocation=Db::name('qunar_notes')->count();
$new_year=Db::name('qunar_notes')->where('start_date','like','%-01-01')->count();//元旦节
$tomb_sweeping=Db::name('qunar_notes')
->where('start_date','like','%-04-04')
->whereOr('start_date','like','%-04-05')
->whereOr('start_date','like','%-04-06')
->count();//查询清明节出行数量
$labour_day=Db::name('qunar_notes')
->where('start_date','like','%-05-01')
->whereOr('start_date','like','%-05-02')
->whereOr('start_date','like','%-05-03')
->whereOr('start_date','like','%-05-04')
->whereOr('start_date','like','%-05-05')
->count();//查询五一节出行数量
$national_day=Db::name('qunar_notes')
->where('start_date','like','%-10-01')
->whereOr('start_date','like','%-10-02')
->whereOr('start_date','like','%-10-03')
->whereOr('start_date','like','%-10-04')
->whereOr('start_date','like','%-10-05')
->whereOr('start_date','like','%-10-06')
->whereOr('start_date','like','%-10-07')
->count();//查询国庆节出行数量
$new_year_percent=$new_year/$travelVocation;//计算元旦占比
$tomb_sweeping_percent=$tomb_sweeping/$travelVocation;//计算清明占比
$labour_day_percent=$labour_day/$travelVocation;//计算五一占比
$national_day_percent=$national_day/$travelVocation;//计算国庆占比
$this->assign('new_year_percent',json_encode($new_year_percent));
$this->assign('tomb_sweeping_percent',json_encode($tomb_sweeping_percent));
$this->assign('labour_day_percent',json_encode($labour_day_percent));
$this->assign('national_day_percent',json_encode($national_day_percent));}4.3.3攻略库模块以景区景点管理为例来对攻略库模块的实现进行说明,景区景点展示了系统当前所有的景点数据信息,如图4.4所示。在该页面可以点击下拉框选择排序方式对景点信息进行排序,可在搜索框输入景点名或景点地址进行查询景点信息,可点击收藏按钮收藏景点信息,也可点击取消收藏按钮取消收藏景点。图4.4景区景点的实现景区景点管理的核心代码,主要介绍了收藏和取消收藏功能的实现,首先需要确定当前系统登录用户,整理每条数据信息,进行新增操作。如果新增成功则收藏成功,反之失败;如果删除成功则取消收藏成功,反之失败。并将数据提示信息以json格式返回前段页面。publicfunctionscenicCollection(){
$scenic_id=Request::post('scenic_id');
$collection_data=[
'collection_type'=>0,
'scenic_id'=>$scenic_id,
'collection_time'=>time(),
'collection_ip'=>request()->ip(),
'user_id'=>session('user_id'),
];//查询条件
$collection=Db::name('collection')->insertGetId($collection_data);//写入操作
if(!$collection){
$result=[
'code'=>0,
'msg'=>'收藏失败',
];
return$result;
}
$result=[
'code'=>1,
'msg'=>'收藏成功',
];
return$result;
}publicfunctioncancelCollection(){
$scenic_id=Request::post('scenic_id');//接收景点数据id
$collection_data=['collection_type'=>0,'scenic_id'=>$scenic_id,'user_id'=>session('user_id'),];
$collection=Db::name('collection')
->where($collection_data)
->delete();//删除操作
if(!$collection){
$result=[
'code'=>0,
'msg'=>'取消收藏失败',
];
return$result;
}
$result=[
'code'=>1,
'msg'=>'取消收藏成功',
];
return$result;
}4.3.4个人中心模块以行程计划管理为例来对个人中心模块的实现进行说明。如图4.5所示,个人中心的行程计划只显示当前登录用户自己发布过的行程计划。用户可以录入景点、预计费用、人物、游玩天数等数据信息,点击蓝色发布按钮,验证通过后即可发布行程计划。在搜索条内分别输入对应的景点名和发布时间即可进行行程计划的查询操作。图4.5行程计划实现行程计划管理的核心代码,主要介绍了根据景点和发布时间进行查询的查询功能的实现。首先判断是否有搜索条件,如果没有,则根据当前等用户的uuid进行查询操作;反之,还需要加上搜索条件进行模糊查询操作。查询完毕将查询数据返回前段页面。publicfunctionplanData($places_search,$start_date_search){
if(empty($places_search)){
$places_map=[];
}else{
$places_map=[['places','like','%'.$places_search.'%']];//根据景点地址进行模糊查询
}
$today_begin_time=$start_date_search.'0:0:0';//当天开始时间
$today_end_time=$start_date_search.'23:59:59';//当天结束时间
if(empty($start_date_search)){
$start_date_map=[];
}else{//匹配当天数据
$start_date_map=[['start_date','betweentime',[$today_begin_time,$today_end_time]],];
}
$plan=Db::name('plan')
->where('user_id',session('user_id'))->where($places_map)
->where($start_date_map)
->paginate(5,false,[
'query'=>request()->param(),
]);
return$plan;
}4.3.5采集管理模块以采集景点数据为例进行采集管理模块的说明。采集景点数据如图5.6所示,用户可以在此页面选择采集规则进行采集景点数据,每进行采集一次,采集景点数据日志就多一条数据,并且采集成功之后系统会提示此次采集共耗时多长和更新了多少条数据,并且管理员可以根据采集时间进行查找采集记录。图4.6采集景点数据实现采集景点数据的核心代码,主要介绍了使用queryList技术根据页面相关采集内容的类名来进行采集功能的实现。首先需要将前端页面管理员制定的采集规则传递给后端,根据采集规则确定采集的网址。然后制定页面采集规则rules和range,进而进行采集工作。并将采集的数据传到模型中,在模型里对数据库进行新增和修改操作,与此同时还需写入采集日志,当所有对数据库的写入和更新操作成功之后才算采集成功。其中,为了防止触发旅游网站的反爬虫机制,需要对采集操作进行时间限制,设置每隔10分钟才能执行采集操作,以物理方法解决反爬虫机制;其次,可设置http代理和伪造http头的方式解决反爬虫。publicfunctionscenicPlot($keyword,$city,$subject){
$proxy=fakeIP();//代理IP
$rules=[//制定采集规则
'scenic_name'=>['.sight_item_about.sight_item_caption.name','text'],//景点名
'city'=>['.sight_item_about.sight_item_info.clrfix.area','text'],//城市
'level'=>['.sight_item_about.sight_item_info.clrfix.level','text'],//等级
'hot'=>[
'.sight_item_about.sight_item_info.clrfix.sight_item_hot.product_star_level',
'text'
],//热度
'site'=>['.sight_item_about.sight_item_info.address','text','-a'],//地址
'floor_cost'=>['.sight_item_pop.sight_item_price','text'],//最低消费
'monthly_sales'=>['.sight_item_pop.sight_item_sold-num','text'],//月销量
'picture'=>['.sight_item_show.show>a>img','data-original'],//图片
'href'=>['.sight_item_show.show>a','href'],//链接
'scenic_introduction'=>['.sight_item_about.sight_item_info.intro','text']//景点描述
];
$range='.sight_item.sight_item_detail';//采集规则
for($i=1;$i<=3;$i++){
$page=$i*1;$urls[]=$page;//采集页数
}
libxml_use_internal_errors(true);//屏蔽输出非标准格式等警告信息
$ql=QueryList::rules($rules)->range($range);//调用采集规则
foreach($urlsas$url_key=>&$url_value){
$scenic=$ql->get('/ticket/list.htm?',[//采集网址
'keyword'=>$keyword,'city'=>$city,
'subject'=>$subject,'page'=>$url_value
],['proxy'=>$proxy,'timeout'=>30,])//proxy设置代理IP
->query()
->getData();//开始采集
$url='/ticket/list.htm?'.'keyword='.$keyword.'&page='.$url_value.
'&city='.$city.'&subject='.$subject;
foreach($scenicas$scenic_key=>&$scenic_value){
self::dataPreProcessing($scenic_value,$subject,$url);//调用数据预处理方法
}
}
$ql->destruct();//销毁当前QueryList对象
}privatefunctiondataPreProcessing(&$scenic_value,$subject,$url){//对数据进行简单预处理
$scenic_value['hot']=cut_string2($scenic_value['hot']);
$scenic_value['href']=''.$scenic_value['href'];
$scenic_value['site']=cut_string2($scenic_value['site']);
$scenic_value['monthly_sales']=cut_string2($scenic_value['monthly_sales']);
$scenic_value['floor_cost']=cut_string2($scenic_value['floor_cost']);
QunarScenic::getScenic($scenic_value,$subject,$url);
}4.3.6日志管理模块以采集日志管理为例进行日志管理模块实现的说明。采集日志管理如图4.7所示,该页面显示了本系统所有管理员采集数据的记录。管理员按照页面提示选择采集类型、输入采集时间均可搜索相关采集记录信息。图4.7日志景点数据实现日志管理模块的核心代码,主要介绍了在采集景点数据页面,根据采集类型和时间对采集日志记录进行查询功能的实现。首先判断是否有搜索条件,如果没有,则查询采集日志的所有数据;反之,还需要加上搜索条件进行查询操作。查询完毕将查询数据返回前段页面。publicfunctionspiderLogSearch(){
$spider_type_search=Request::post('spider_type_search');//查询类型
$spider_time_search=Request::post('spider_time_search');//查询时间
$spider_log=self::spiderData($spider_type_search,$spider_time_search);//查询数据库
if($spider_log->isEmpty()){
$result=[
'code'=>0,
'msg'=>'未找到有关采集日志数据信息',
];
return$result;
}
$result=[
'code'=>1,
'msg'=>'查询成功',
];
return$result;
}privatefunctionspiderData($spider_type_search,$spider_time_search){//选择查询类型
if($spider_type_search==1){
$spider_type_map=[['spider_type','=',0],];//旅游城市
}elseif($spider_type_search==2){
$spider_type_map=[['spider_type','=',1],];//旅行日历
}elseif($spider_type_search==3){
$spider_type_map=[['spider_type','=',2],];//游记
}elseif($spider_type_search==4){
$spider_type_map=[['spider_type','=',3],];//景点
}else{
$spider_type_map=[];//类型查询条件为空
}
$today_begin_time=$spider_time_search.'0:0:0';//当天开始时间
$today_end_time=$spider_time_search.'23:59:59';//当天结束时间
if(empty($spider_time_search)){
$spider_time_map=[];//时间查询条件为空
}else{//匹配当天数据信息
$spider_time_map=[['spider_time','betweentime',[$today_begin_time,$today_end_time]],];
}
$spider_log=Db::name('spider_log')
->where($spider_type_map)->where($spider_time_map)//查询条件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医保双定管理办法
- 午餐午休管理办法
- 兴仁停车管理办法
- 单体柱管理办法
- 代买业务管理办法
- 示范队管理办法
- 信托财富管理办法
- 分支律所管理办法
- 储气罐管理办法
- 护林员管理办法
- 城市精细化管理与有机更新路径研究
- 警察礼仪 培训课件图片
- 公司航测无人机管理制度
- 大学物理(山东联盟)知到智慧树期末考试答案题库2025年青岛科技大学
- 综合训练01集合与常用逻辑用语(18种题型60题专练)(原卷版)
- 治安纠纷谅解协议书
- 菜品委托开发合同协议
- TSG D7004-2010 压力管道定期检验规则 -公用管道
- Unit 5 Here and now 单元说课 课件 2024-2025学年人教版七年级英语下册
- 2025-2030中国护发素销售预测分析及市场产销供需现状研究报告
- 2025年安徽合肥庐阳国有资产投资控股集团招聘笔试参考题库附带答案详解
评论
0/150
提交评论