盧弘卓,黃家俊,磨敦仁,蔡群英
(韓山師范學院計算機與信息工程學院,潮州 521041)
網(wǎng)上有著各種各樣的旅游網(wǎng)站,而且其中的信息較為分散,這就導致了信息混亂,人們在短時間內很難找到對他們有用的內容[1]?;谠朴嬎闫脚_的旅游信息聚合客戶端的研發(fā),借助移動互聯(lián)網(wǎng)技術和信息聚合技術,解決從分散的數(shù)據(jù)中獲取潮州的旅游信息,方便用戶在手機上一站式的瀏覽。通過對用戶訪問網(wǎng)站的行為,為用戶進行個性化推薦。
阿里云輕量級服務器是阿里巴巴旗下的產(chǎn)品,它具有如下的優(yōu)勢。一是易于使用,二是具有成本效益。Python[2]是一門腳本語言,天生就十分的簡潔,并且對數(shù)據(jù)方面的工作具有與生俱來的優(yōu)勢。SSM框架是由Spring+SpringMVC+MyBatis構成,用于Web項目的開發(fā)。Hadoop[3]作為開源的并行計算平臺,可以使用戶在不了解分布式底層細節(jié)的情況下進行相關的工作,并且它解決了兩個重要的問題:大數(shù)據(jù)存儲、大數(shù)據(jù)分析,即Hadoop的兩大核心:HDFS和MapReduce。
系統(tǒng)采用Scrapy爬蟲框架獲取數(shù)據(jù),并將獲取的數(shù)據(jù)存入MySQL數(shù)據(jù)庫中,SSM框架實現(xiàn)對數(shù)據(jù)庫中的數(shù)據(jù)進行訪問,以接口的形式與客戶端之間的交互,系統(tǒng)架構如圖1所示。
圖1 系統(tǒng)架構圖
前端采用目前流行的VUE框架來開發(fā),VUE是一套用于構建用戶界面的漸進式框架,采用MVVM設計模式(即Model-View-ViewModel),具體的架構如圖2所示。
圖2 MVVM架構圖
Model(模型)代表內容的數(shù)據(jù)訪問層,View(視圖)就是用戶在屏幕上看到的結構、布局和外觀。相比較MVC設計模式,多出的ViewModel視圖模型是MVVM模式的核心,它是連接View和Model的橋梁,能夠實現(xiàn)從視圖轉化成模型,也可以實現(xiàn)從模型轉化成視圖,這就是數(shù)據(jù)的雙向綁定。
旅游信息聚合客戶端的開發(fā),實際上大部分是對旅游相關信息的精簡“拷貝”,同時對移動終端的特點作了優(yōu)化及拓展,項目涉及的相關技術包括了網(wǎng)站和小程序的開發(fā),服務端網(wǎng)絡爬蟲及數(shù)據(jù)處理等。作為信息聚合客戶端的網(wǎng)站和微信小程序,應當提供如下功能:
(1)發(fā)布的網(wǎng)站頁面,包括用戶的注冊登錄和評論、景點信息、住宿信息、新聞信息、游記信息等。
(2)根據(jù)用戶的瀏覽記錄,給用戶推薦感興趣的信息。
系統(tǒng)功能結構圖如圖3所示。
圖3 功能結構圖
趣潮游網(wǎng)站[4]涉及的表包括旅游酒店表、評論表、美食表、店鋪表、新聞表和游記文章表等。其中用戶表包括用戶姓名、性別、圖片和用戶推薦關鍵詞。訪問記錄表包括用戶id,訪問網(wǎng)頁類型,訪問目標網(wǎng)址,訪問次數(shù)的信息。
各數(shù)據(jù)庫表具體如圖4所示。
圖4 數(shù)據(jù)庫表圖
一般網(wǎng)站通常具有靜態(tài)的導航頁面,并鏈接到具體信息頁面,網(wǎng)絡爬蟲從導航頁面開始,對網(wǎng)頁的結構進行分析,并且編寫相應的爬蟲程序。爬蟲的運行圖如圖5所示。爬蟲程序是使用Scrapy[5]框架且運行在服務器上的,所以需要先在服務器安裝Scrapy,具體流程如下:
(1)先利用pip下載必要的包(Twisted,bzip2)
(2)下載Scrapy并且設置環(huán)境變量
以旅游新聞推薦的爬取為例,其信息處理過程如下:
(1)服務器上通過使用crontab服務定時運行Scra?py腳本文件,設置的運行頻率是每天一次。服務器運行爬蟲時,從網(wǎng)頁中爬取信息,存入MySQL數(shù)據(jù)庫中。存入數(shù)據(jù)庫后,以存入的文章作為總的文本庫,從里面分割關鍵詞并存入數(shù)據(jù)庫中。
(2)HTML具有相對規(guī)范化的文本層次結構,從中提取每條潮州旅游信息中的標題、作者、來源、圖片。
(3)腳本成功運行之后,在Linux自帶的郵件日志中可以查看運行的情況。腳本中需要操作MySQL數(shù)據(jù)庫,所以在項目中引入了MySQL包來支持數(shù)據(jù)庫操作。由于有眾多頁面信息,不同頁面的爬取頻率不一,所以每一信息版塊都對應數(shù)據(jù)庫中的一張表。在進行重復爬取時使用scrapy_deltafetch插件進行去重,篩選掉重復的URL,實現(xiàn)了增量爬蟲。系統(tǒng)運行時爬取了各類網(wǎng)站中的游記、新聞、景點等許多信息。
圖5 爬蟲運行圖
PC客戶端頁面開發(fā)主要采用HTML、CSS、Java Script[6]技術以及 jQuery、Bootstrap、Vue、Swiper等主流框架,其中主要采用Vue框架進行數(shù)據(jù)的雙向綁定,采用前沿的AJAX、axios技術訪問接口API數(shù)據(jù)。
PC客戶端頁面主要采用1-1-1布局,首頁頂層主要是登錄注銷和導航欄信息,導航欄包括首頁、潮州介紹、景點介紹、美食介紹和客棧介紹,中間層主要是十條最新新聞信息、類別介紹和四條熱門的景點信息,底層主要是結尾圖標以及客戶端名稱。網(wǎng)站頁面如圖6所示。潮州介紹頁頂層主要是登錄注銷信息,中間層主要是潮州介紹的視頻以及地理位置,底層主要是結尾圖標以及客戶端名稱。景點介紹頁頂層主要是登錄注銷信息,中間層主要是模糊查詢框以及景點信息,底層主要是結尾圖標以及客戶端名稱。美食介紹頁、旅店介紹頁、新聞列表頁與景點介紹頁結構一致。
圖6 網(wǎng)站頁面圖
小程序作為一種客戶端,當前是比較受歡迎的,依托微信平臺,無需下載安裝就能使用。微信小程序通過微信開發(fā)者工具進行開發(fā)的,整個框架包括邏輯層、視圖層和flex模型,邏輯層由JavaScript編寫和實現(xiàn)的,視圖層由WXML和WXSS配合組件構成的,flex布局可以確保頁面適應不同的屏幕尺寸及設備類型。小程序自成體系,有自己的組件和API,極大地方便了開發(fā)者進行開發(fā)。項目的小程序部分,使用了組件里面的表單組件和基礎內容,例如label、input、button等。API方面使用了基礎、路由、界面和網(wǎng)絡方面的內容,例如網(wǎng)絡中微信小程序自帶的wx.request。用戶進入小程序和在小程序提交的事件采用axios請求后臺數(shù)據(jù),后臺將數(shù)據(jù)傳給小程序并顯示。前后端統(tǒng)一了數(shù)據(jù)格式,且都以JSON格式進行交互。
小程序的首頁有3個板塊,頂欄是小程序的名稱,頂欄下方是信息詳情列表頁,默認按照訪問次數(shù)多少來進行信息的排序,最后一欄是一個導航欄,有三個按鈕,分別是“景點”、“美食”、“客?!焙汀百Y訊”,點擊相應按鈕可以進入相應的板塊。其中新聞界面如圖7所示,景點界面如圖8所示。
圖7 新聞界面圖
圖8 景點界面圖
用戶瀏覽的數(shù)據(jù)來源于數(shù)據(jù)庫中的日志記錄,且將其中的記錄寫入到txt文本文件中,作為推薦算法實現(xiàn)的輸入條件。記錄的文本內容格式如下:
[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。
算法的實現(xiàn)思路[7]:
(1)后端根據(jù)用戶名從用戶表中獲取用戶讀過的文章id(后十條,重復的id需過濾掉)
(2)然后根據(jù)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 推薦腳本運行圖
項目對旅游相關的信息進行了聚合,并且提供了網(wǎng)頁和微信小程序兩種客戶端表現(xiàn)形式。用戶登錄之后,系統(tǒng)對用戶的行為進行了記錄,保存在日志文件和數(shù)據(jù)庫中,為推薦功能的實現(xiàn)提供數(shù)據(jù)。為了讓項目的數(shù)據(jù)量更加多,爬蟲方面的代碼需要進行調整,這是下一步努力的方向。