APP下载

一种基于JAVA爬虫的网络票务查询系统

2018-03-04叶长青宋胡杨

电脑知识与技术 2018年36期
关键词:网络爬虫数据可视化

叶长青 宋胡杨

摘要:随着人类科技水平的不断发展,计算机和网络的使用也变得十分广泛,同时随着人们的需求日益增加,人们已经开始意识到信息的重要性,而在当下这个网络时代,数据信息大量进入互联网,信息的网络化使得人们对于信息的收集和使用变得更加便捷,在这样的背景下,诞生了网络爬虫技术。网络爬虫(web spider)是可以按照设定的规则对网络信息进行抓取的程序或者脚本,是搜索引擎的重要组成部分。该文使用JAVA语言通过对网上的票务信息的抓取来获取火车票以及机票的数据,进而通过springMVC框架对数据展示与逻辑进行整合。使用此票务查询系统,可以实时查询票务信息以及更加方便的对数据进行统计汇总。

关键词: JAVA;网络爬虫;数据可视化

中图分类号:TP311.5        文献标识码:A        文章编号:1009-3044(2018)36-0041-02

1 国内外网络爬虫研究现状

CNNIC一年两次发布的《中国互联网络发展状况统计报告》中进行了对中国互联网络发展状况的全面反映和分析,以权威性被世人所知。在该报告中可以看出,一方面在信息时代,互联网上面充斥着异常庞大的数据信息,另一方面,通过人工操作的方式在庞大的互联网上想要找到自己需要的信息变得越来越困难。

自从2011年起,网络爬虫技术开始渐渐流行起来,逐步地被人们所重视,近几年更是成为最炙手可热的技术之一。爬虫的开源框架也在不断增加,使得爬虫软件的开发门槛变得越来越低,人们可以利用爬虫来更加方便地获取所需要的信息。

2 常用的网络爬虫技术与框架

搜索引擎是网络爬虫的一大重要应用,主要用于辅助收集用户互联网上的信息。本文所使用的原理与搜索引擎的主要流程大致相似,只是通过缩小了数据的来源来简化搜索引擎的过程,并且可以使得服务器负载要求得到降低,以实现可以在个人电脑中进行爬虫程序的运行。

目前大部分网络爬虫的框架基本都是基于java或python语言的。如在python语言基础上进行开发的scrapy框架、pyspider框架等,基于java的Nutch、WebMagic、HttpClient、SpiderMan、Crawler4j、WebController。基于框架的java爬虫可以十分简便的对网络的数据进行爬取。为了对爬虫底层原理进行更加深入的了解,本文不使用現有的爬虫框架,二十使用原生java语言中的net包实现对网络信息的抓取。

3 需求分析

3.1 可行性研究分析

票务查询系统所需要的数据通过编写网络爬虫程序来实现定向抓取,通过对数据的过滤、分析以及存储来得到系统所需的数据。数据的可视化模块通过jsp页面进行展示,后台服务器采用tomcat+SpringMVC的技术,使用开源的MySQL进行数据的存储,这些技术都是业界成熟多年的技术,完全可以满足本项目的要求。

通过对网络上众多的票务平台进行的调查,可以发现票务查询的请求以及返回的数据是具有一定规律的,发送的http消息头的参数具有固定的名称和种类,返回的http消息体也是具有固定结构的json字符串,这便让我们对票务数据的解析成为可能。

3.2 需求分析

3.2.1 在线查询

此功能是本系统的主要功能,需要实现对查询条件的设置与检查、对票务数据的收集,并将数据传输至视图页面进行展示。由于在线查询需要使用网络带宽,所以需要对此功能进行限制,用户登录后才可使用在线查询系统。

3.2.2 离线查询

此功能为使用本地查询代替占用网络进行的在线查询,通过页面收集查询条件并通过本地数据库对符合查询条件的数据返回至页面进行展示,作为在线的查询功能的补充。本地数据库的数据需要定时更新,通过设置定时器来完成该数据更新。

3.2.3 用户注册与登录/注销

需要用户登录才可使用在线查询功能,在未登录的情况下首先需要用户注册。系统应记录每一个用户的个人信息。管理员使用单独的模块与登录界面。

3.2.4 管理系统

管理员登录后台管理系统后,可对用户账户信息进行管理,以及实现数据更新、制定和修改定时数据更新的计划等。管理员通过专门的页面进入后台管理系统。

4 系统设计与实现

4.1 业务模块与流程

本文使用MVC(Model/View/Controller)模式对票务系统进行构建,首先,票务查询系统的所需要的数据是通过爬虫抓取,由于票务数据的实时性,所以对票务数据的更新不能间隔过久,但是由于数据量较大,也不能过于频繁地对所有的票务数据进行更新,于是将用户分为普通用户和管理员用户,将数据更新操作限定为只有管理员可以进行,以此来避免普通用户误操作引起的服务器占用过多的问题。

通过上述总结以及前面对需求的描述可得到结构图与流程图如下(图1)。根据此业务流程图进行对系统各个模块的设计与开发。

4.2 数据库设计

在本系统中,涉及的数据面总共分为三个部分:用户、车站、车票,系统数据库ER图构成如下图(图2)

5 系统实现

系统遵循MVC模式设计,系统的文件结构如下:Annotation为声明用于忽略dao层的注解,constants存储一些程序内部使用的固定值便于修改,ctrl、dao、model、service为MVC模式的各个模块,spider内含有用于获取数据的爬虫,utils为一些程序中会用到的工具类的整合。

5.1 用户模块

通过数据库设计对应用户的类user来存放用户数据。并依据Spring框架分别创建MainController、MainService、MainDao作为用户登录控制器。MainMapper作为用户数据库sql操作管理xml。前端页面通过AngularJS绑定获取输入框数据并通过jQuery.post向服务器发起请求,请求链接头部为${pageContext.request.contextPath }获取服务器头部地址,尾部通过注解@RequestMapping在MainController设置,并将username与userpwd传入MainController,调用MainService验证登录,通过调用MainDao接口来调取对应MainMapper中的方法查询数据库中的用户信息并将信息存入user类。如果登录成功则检查用户权限是否为管理员,如果是,直接转发至管理员页面,如果不是则将登录用户id存入session并进入查询页面。

5.2 数据获取模块

数据获取模块为本系统的核心模块,通过发送http请求来实现获取本系统所需要的数据,通过分析对方返回的数据格式的分析,例如:“@bjb|北京北|VAP|beijingbei|bjb|0@bjd|北京东|BOP|beijingdong|bjd|1@”,发现,数据之间以“@”进行分割,通过服务器端获取数据并将数据进行分割存储可以得到车站的信息。通过管理员页面的导入操作向AdminController中insertStation()中@RequestMapping设置的地址发起请求,执行AdminService中insertStation()函数,在AdminService中调用TrainSpider中getStationData()来获取车站列表并将车站表通过调用AdminDao接口映射的AdminMapper中的对应方法存入数据库中。此操作只需在系统部署时进行一次即可。

有了车站的信息便可以进行对获取车票程序的编写,首先先对车票查询的请求url进行分析,可以得出http消息体的结构,向此url发送请求便可以获得查询的车票的全部信息,再通过对信息的分析和拆分便可以将信息存入对应的java类再在程序中进行操作便构成了车票的爬虫。通过管理员页面的导入车票信息来导入从今日起未来七日的车票信息。此操作向AdminController中insertTrain()中@RequestMapping设置的地址发起请求,执行AdminService中insertTrain()函数,在此函数中AdminService会首先通过调用TrainSpider中getStationData()来获取车站列表,根据车站列表遍历获取需要查询的所有车票查询条件并调用TrainSpider中getTrainData()获取车票信息表并通过调用AdminDao接口映射的AdminMapper中的对应方法存入数据库中。为保证数据唯一性,导入前会删除掉数据库中现有车票数据。

查询时通过对session中是否存有用户id判斷是否登录,如有登录则进行在线查询,没有登录则进行离线查询。在线查询直接使用TrainSpider中getTrainData()获取车票信息。离线查询则调用SearchController到SearchService到SearchDao中获取数据库中对应查询条件的数据。查询需要使用数据库中对应的车站信息,所以还需要从SearchDao中获取车站信息来进行辅助。

6 小结

在互联网的飞速发展下,数据在生活之中所扮演的角色也变得十分重要,爬虫系统也逐渐成为数据获取的主要方式,通过本文所实现的票务查询系统可以对爬虫系统进行一个初步的了解。

本文主要介绍了利用java爬虫技术的票务查询系统的开发,从需求分析、相关技术分析、框架搭建、具体设计等几个方面进行了介绍,并且对使用的技术进行了详细的分析与解释。本次开发有以下几个技术要点:1) 对请求的分析较为复杂,本系统中使用的不仅是简单的http操作,在查询时使用的车站代码也需要通过爬虫获取,获取后才得到车站中文对应名称。

2) 对获取的数据解析较为复杂,系统通过请求获取到的票务数据为按照某种格式存储的数据,需要对数据进行多次不同条件与结果的查询来对数据格式进行分析,数据量较大所以数据格式分析工作量较大。

3) 对于网络错误返回码对应页面的响应,由于爬虫系统需要使用互联网,难免遇到网络堵塞等问题,需要针对网络可能发生的多种问题进行分析并编写对应的响应。

本次开发的票务查询系统仍然存在着些许不足之处,比如在多用户高并发的情况下的快速响应方面还需要做进一步的优化,但在用户量不是特别大的情况下,已经可以实现对票务信息的在线和离线查询,业务的框架已经建立起来了,可以作为此类问题的一个解决方案。

参考文献:

[1] 刘晶晶. 面向微博的网络爬虫研究与实现[D]. 上海: 复旦大学, 2012.

[2] 中国互联网络信息中心. 第32次中国互联网络发展状况统计报告[J]. 互联网天地, 2013(10):74-91.

[3] 郑豪, 何彦雨. 基于Java平台的分布式网络爬虫系统研究[J]. 北京. 科技创新与应用, 2017(1):112-112.

[4] 李博文. 基于Java的搜索引擎的设计与实现[D]. 长春: 吉林大学, 2016.

[5] 杨青松. 爬虫技术在互联网领域的应用探索[J]. 电脑知识与技术, 2016, 12(15):62-64.

[6] 罗刚. 自己动手写网络爬虫[M]. 北京: 清华大学出版社, 2016.

[7] 马原, 沈炜, 贾宇波. AngularJS框架的搜索引擎优化策略与实现[J]. 工业控制计算机, 2017, 30(4):113-114.

[8] 吴向阳, 陈万烤, 张祯,等. 面向订票服务器端爬虫的可视检测方法研究[J]. 计算机辅助设计与图形学学报, 2018(1).

[9] 郑豪, 何彦雨. 基于Java平台的分布式网络爬虫系统研究[J]. 科技创新与应用, 2017(1):112-112.

[10] 董博, 李翀, 刘学敏,等. 基于爬虫的数据监控系统[J]. 计算机系统应用, 2017, 26(10):53-60.

[11] 朱莉娜, 李泽平. 网络爬虫技术的研究与实现[J]. 科学技术创新, 2017(10):166-166.

[通联编辑:代影]

猜你喜欢

网络爬虫数据可视化
可视化:新媒体语境下的数据、叙事与设计研究
炼铁厂铁量网页数据获取系统的设计与实现
我国数据新闻的发展困境与策略研究