【電影票平臺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

提交評論