【电影票平台APP客户端设计12000字(论文)】_第1页
【电影票平台APP客户端设计12000字(论文)】_第2页
【电影票平台APP客户端设计12000字(论文)】_第3页
【电影票平台APP客户端设计12000字(论文)】_第4页
【电影票平台APP客户端设计12000字(论文)】_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

[8],然后在爬取过程中每隔10秒随机从IP池中获取IP,从而使豆瓣网站无法感知到爬虫行为。数据保存由于需要保存三张表的数据,所以创建了三个对应数据表的Item,编写相应插入的SQL语句。ItemPlines在通过instanceof函数判断对应的Item,并且调用相应的SQL语句,将这些数据信息插入到不同的数据表当中,通过数据库查看共爬取的电影信息。电影信息爬虫部分数据结果如图5-2所示。图5-2电影信息表部分数据电影演员信息爬虫部分数据结果如图5-3所示。图5-3电影演员信息表部分数据电影剧照信息爬虫部分数据结果如图5-4所示。图5-4电影剧照信息表部分数据购票信息爬取购票信息数据如果爬取全国的信息的数据量很大,目前的硬件设施可能支持不了,所以决定只爬取淮安市影院的购票信息。下面介绍爬取淘票票平台数据的具体实现。本次购票信息决定爬取额是淘票票,因为目前存在的平台就是猫眼和淘票票,但是猫眼为了反爬取,最近改变可规则并且加密可数据,所以只能爬取淘票票。淘票票则是需要先爬取影院列表页面,然后提取进入影院详情页的URL,构造影院详情页请求,然后在从响应结果中先提取出电影名和放映日期,通过CSS选择器提取出该电影和日期下面的购票信息列表,通过Python迭代器,编写提取规则代码,提取出所需信息,并加上淘票票平台标识。在爬取过程中,发现淘票票设置了一定的反爬取措施的,就是当你连续请求速度太快使,淘票票会根据你的登录状态制定不同的策略。如果你处于未登录状态就会让你登录,如果处于登录状态就让你输入验证码,并且所有请求必须要带上Cookie,否则返回错误页面。针对此措施,首先我怕对爬取页面做了延时操作,意思是每隔一秒爬取一个页面,这样爬取的效率会降低了,但是大大提高了数据的获取率。在请求之前先进行登录操作,然后获取到Cookie,每次页面请求就带上Cookie这样可以伪装成浏览器操作,使淘票票无法检测到这是爬虫操作。但是电影的信息每天都会变化,信息每天都能会不一样,针对这种情况,我是这样解决的,使用Python编写一个脚本,内容大致是到了0点,再自动爬取平台的影票信息。数据保存也是通过ItemPines获取到不同的Item,因此只要构建出一个SQL插入语句,然后执行SQL语句,将数据保存到数据库当中,通过数据库查询可知该平台共爬取的购票信息。购票信息爬取部分数据如图5-5所示。图5-5购票信息爬取部分数据

服务数据分析和接口影院信息分析和接口由于从电影平台爬取的数据过于杂乱,所以需要把数据重新从数据库取出来再进行分析整理。首先把项目的影院信息按照区域划分,为了让用户在客服端在选择自己所在的区域的影院。根据请求的结果,把同一个区域和该平台的影院信息保存到list中,并且使用一个数据字典把区域当做key值,来实现该平台的影院信息管理。接口实现则通过Flask-RESTful框架,编写处理GET请求代码,确定好请求参数,然后根据请求参数从数据获取数据,具体代码实现如下:defget(self):prams=self.parse.parse_args()page=prams.get('page')size=prams.get('size')movie_name=prams.get('movieName')cinema_id_list=TicketInfo.query.filter(TicketInfo.movieName==movie_name).distinct().offset(page*size).limit(size).values('cinemaId')forcinema_idincinema_id_list:price=TicketInfo.query.filter(TicketInfo.cinemaName).order_by(TicketInfo.price).first()cinema=Cinema.query.filter(Cinema.id==cinema_id).all()电影信息分析和接口电影信息需要分为上映电影和即将上映两种状态,所以从数据库获取到所有电影的信息根据时间进行爬取,通过迭代器进行判断日期是否大于当前日期,如果大于当前日即视为即将上映电影,如果小于当前日期则视为已经上映电影,然后再保存到数据库当中。编写处理GET请求接口代码,实现方式和上述一样,具体代码实现如下:defget(self):args=self.parser.parse_args()status=args.get('status')page=args.get('page')size=args.get('size')movie_list=MovieInfo\.query.filter(MovieInfo.status==status)\.order_by(MovieInfo.year,MovieInfo.month,MovieInfo.day)\.paginate(page=page,per_page=size,error_out=True).itemsmovie_vm_list=[]formovieinmovie_list:photo_list=MoviePhoto.query.filter(MoviePhoto.movieName==).all()actor_list=MovieActor.query.filter(MovieActor.movieName==).all()movie.actor=actor_listmovie.photo=photo_listmovie_vm_list.append(movie)returncommon.success_result(marshal(movie_vm_list,movie_fields))购票信息平台分析和接口数据爬虫所爬取到购票信息中的影院名称为当前平台的影院信息并没有保存影院ID,这就造成了影院名称不一致,通过上述介绍的方法重新确定好CinemaID然后保存到数据库当中。编写处理GET请求代码,实现方式和上述一样,实现代码如下:args=self.parse.parse_args()cinema_id=args.get('cinemaId')movie_name=args.get('movieName')ticket_info=TicketInfo.query\.filter(TicketInfo.cinemaId==cinema_id,TicketInfo.movieName==movie_name)returnticket_infoAndroidAPP客户端模块影院信息模块影院信息模块主要通过列表展示具体影院信息。由于影院列表需要根据当前位置距影院位置的距离远近进行排序,所以进入首页通过高德地图获取当前位置的经度和纬度,使用高德地图API函数与影院的经纬度通过公式计算出具体距离,再通过重写JAVA排序函数重新对影院列表进行排序,并通过RecycleView列表控件进行展示,并且配合下拉刷新控件和上拉加载控件,实现分页加载避免页面一次渲染过多数据,影响手机性能。同时还可以根据区域下拉列表的选择区域加载出所在区域下的所有影院信息。通过二级缓存提高客户端性能,二级缓存即是将请求的数据保存到内存中,下次加载直接从内存中获取数据,不再进行网络请求,从而减轻服务器的压力,也可以加快页面的渲染速度,使用户可以更快的看到信息。影院列表界面如图5-6所示。图5-6影院信息界面图电影信息模块电影信息模块主要范围正在上映和即将上映两个界面,页面通过ViewPager+Fragment可以滑动切换页面,并且Fragment中通过RecycleView进行列表展示。由于架构采取MVP,故在Presenter层中处理业务逻辑代码,并且将Presenter方法和Fragment的周期通过Lifecycle官方生命周期框架进行绑定,防止内存泄露。通过Retrofit+RxJava组合框架对服务器进行链式请求,当请求数据失败进行错误处理,成功把数据传输给View层进行页面渲染。图片使用Glide加载框架,可以直接根据网络地址加载图片,并且可以压缩图片的大小,从而可以提高整体加载速度。电影信息界面图如5-7所示。图5-7电影信息界面图购票信息模块购票信息模块会根据用户所选择的信息比如影院ID和电影ID获取到购票信息,并且在本地创建一个HashMap,Key值为日期,Value值为电影信息,根据日期动态创建出对应的ViewPager+Fragment。当电影切换时,则会重新刷新界面,展现出对应的数据。通过对RecycleView列表控件的重绘,开发出二级列表加载控件,使用该控件可以把淘票票价格信息展示出来,从而达到直接看到票价的效果。购票信息界面图如图5-8所示。图5-8购票信息界面表测试测试目标通过测试功能,来测试覆盖平台的界面,来确保平台的所有功能可以正常使用,也可以方便检测平台还存在的缺陷,方便以后修改,以此来保证用户可以使用该平台。测试方式对各个模块进行单元测试、功能测试以及集成测试。(1)单元测试:对项目中最小的单元进行测试,比如里面刚写好的代码,可以直接测试编写的是否正确,提高实践的效率和项目的质量。(2)功能测试:根据初期代码编写的模块组成的功能,单个单个功能进行测试,确保每个功能都能正确运行。(3)集成测试:将之前单个模块组合起来,形成一个整体。测试整体项目能否实现,防止出现某一个模块只能单独运行,确保项目的整体性和流畅性。测试环境(1)硬件环境:IntelCore(TM)T66702.2GHz,麒麟985(2)软件环境:Nginx1.8.1(3)操作系统:Windows10,Andorid12.1(4)运行平台:JDK1.8、Pythong3.7(5)数据库软件:MYSQL5.6接口测试影院信息接口根据影院信息接口需要的请求参数比如Page(页码)、Size(单页数量),MovieName(电影名),对接口发送请求,判断发送的数据是否可以返回,能否对异常数据惊醒处理,来判断整个影院信息接口是否可以用。影院接口测试结果如表6-1所示。表6-1影院接口测试表输入等价类测试用例测试数据期望结果实际结果无效等价类Page:空Size:非空Page:Size:1:数据获取失败无数据返回Page:非空Size:空Page:1Size:数据获取失败无数据返回Page:错误Size:错误Page:-1Size:-10数据获取失败无数据返回Page:非空Size:非空MovieName:空Page:1Size:10MovieName:数据获取失败无数据返回Page:正确Size:正确MovieName:错误Page:1Size:10MovieName:没有数据获取失败无数据返回有效等价类Page:正确Size:正确MovieName:正确Page:1Size:10MovieName:数据获取成功返回可播放红海行动影院前十条数据Page:正确Size:正确Page:2Size:20数据获取成功返回所有影院中的第二页二十条影院数据电影信息接口根据电影信息接口需要的请求参数比如Page(页码)、Size(单页数量),CinemaId(影院ID),对接口发送请求,并且判断数据是否可以正常返回,能否对异常数据进行处理,来判断整个电影信息接口是否可以用。 电影信息接口测试结果如表6-2所示。表6-2电影信息接口测试表输入等价类测试用例测试数据期望结果实际结果无效等价类Page:空Size:非空Page:Size:1:数据获取失败无数据返回Page:非空Size:空Page:1Size:数据获取失败无数据返回Page:错误Size:错误Page:10000Size:-10数据获取失败无数据返回Page:非空Size:非空CinemaId:空Page:0Size:15CinemaId:数据获取失败无数据返回Page:正确Size:正确CinemaId:错误Page:2Size:15CinemaId:-100数据获取失败无数据返回有效等价类Page:正确Size:正确CinemaId:正确Page:1Size:10CinemaId:28805数据获取成功返回影院上映电影前十条数据Page:正确Size:正确Page:3Size:10数据获取成功返回所有电影信息中的第三页十条影院数据购票信息接口根据电影信息接口需要的请求参数比如MovieName(电影名)、CinemaId(影院ID),对接口发送请求,判断数据是否可以对异常数据是否处理,从而可以判断购票功能能否顺利完成。购票信息接口测试结果如表6-3所示。表6-3购票信息接口测试表输入等价类测试用例测试数据期望结果实际结果无效等价类MovieName:空CinemaId:非空MovieName:CinemaId:28550数据获取失败无数据返回MovieName:非空CinemaId:空MovieName:CinemaId:数据获取失败无数据返回MovieName:错误CinemaId:错误MovieName:CinemaId:-100数据获取失败无数据返回有效等价类MovieName:正确CinemaId:正确MovieName:CinemaId:28851数据获取成功返回红海行动下该影院的所有购票信息测试分析通过测试分析,检测功能,上述的功能模块均能正常使用。因为参数请求正确就可以返回需要额数据,但是本平台对异常参数处理还不够好,与市面上大众使用的APP还有许多的差距,提示也不够人性化,需要我大大改进。

结束语转眼四年学习时间过去了,在这段时间里学到了许多的东西,明白自己还不懂好多知识。通过这次的毕业设计实践,我完成了Python爬虫端、Python服务端和Android客户端功能设计和实现,从底层开始接着到上层应用,逐步实践。本次毕设对我的能力是一个巨大的提升,让我对数据爬虫技术又学习了一次,又领悟了一次数据分析的妙处。同时在毕设中也学到很多东西,通过项目实践中,知道了前期对项目需求和功能的理解十分重要,只有知道自己想要做什么,才能安排合理,在实践中期才能更好的对比起初的目标,接着更好的实践。同时对爬虫也有了很多的理解,在初期爬取数据时,网站会有反爬取措施,自己会慢慢积攒经验,思考如何才能解决网站的反爬取措施。比如猫眼在这方面就做的很好,加密了数据。本次毕设也有不足之处,做毕设之前,计划爬取猫眼数据,但是由于猫眼官方改变了规则,并使数据加密,我之前用的代码爬取不下,找了规则爬取的信息也都是乱码,所以这是我的不足之处。通过本次毕设项目实践,我得到了更多的经验,知道了只有努力的做一件事,不断总结,才会有不一样的收获。我相信这样的经验会给我以后不管是读研还是工作提供很大的帮助。参考文献(美)米尔顿.深入浅出数据分析[M].北京:电子工业出版社,2012.(澳)理查德劳森.用Python写网络爬虫[M].北京:人民邮电出版社,2016.(挪)海特兰德.Python基础教程[M].北京:人民邮电出版社,2014.杨丰盛.Android技术内幕[M].北京:机械工业出版社,2011.杨云君.Android的设计与实现[M].北京:机械工业出版社,2013.李刚.疯狂Android讲义[M].北京:电子工业出版社,2013.白雪丽.浅析基于Python爬虫技术的特性及应用[J].山西科技,2018,33(02):53-55.刘顺程,岳思颖.大数据时代下基于Python的网络信息爬取技术[J].电子技术与软件工程,2017(21):160.LinDeng,JeffOffutt,PaulAmmann,Nariman

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论