王凱琪,蘭全祥
(攀枝花學(xué)院數(shù)學(xué)與計(jì)算機(jī)學(xué)院 四川 攀枝花 617000)
隨著網(wǎng)絡(luò)的發(fā)展,電子小說越來越多,且催生出了很多小說分享網(wǎng)站。而對于用戶來說想從海量的小說分享網(wǎng)站中快速地獲取所偏好的小說成為一大難題。另外,諸多小說分享網(wǎng)站都有其自己的小說排列及分類規(guī)則,且信息檢索都較為單一,無法滿足所有用戶的個性化需求。
通過開發(fā)一套針對某小說分享網(wǎng)站的數(shù)據(jù)爬取及分析系統(tǒng),對其分享的小說數(shù)據(jù)進(jìn)行爬取并存入到數(shù)據(jù)庫中,然后再對小說數(shù)據(jù)進(jìn)行分析及可視化。該系統(tǒng)具有更為人性化的檢索功能以及較強(qiáng)的小說篩選功能,方便用戶快速找到自己中意的小說。
該系統(tǒng)實(shí)現(xiàn)對網(wǎng)絡(luò)小說的爬取與管理,可以爬取該網(wǎng)站上的所有小說及小說的相關(guān)信息并存入數(shù)據(jù)庫中,爬取到的小說信息包括小說名稱、作者名、小說類別、小說標(biāo)簽、小說摘要、各類評價(jià)數(shù)據(jù)、點(diǎn)擊量、閱讀量、網(wǎng)址等。當(dāng)用戶登錄該系統(tǒng)之后,可以根據(jù)自己的喜好進(jìn)行查詢和篩選,例如對評價(jià)數(shù)據(jù)的自定義加權(quán)排序、小說類型選取、關(guān)鍵詞模糊查詢等。該系統(tǒng)還可以根據(jù)小說的各類實(shí)時評價(jià)數(shù)據(jù)給出一個綜合推薦度以供用戶參考。用戶還能夠自主獲取最新小說、查看閱讀榜單(總閱讀量、月閱讀量)以及收藏小說等。
經(jīng)上述分析,該系統(tǒng)主要分為登錄注冊模塊、小說查看模塊、智能搜索模塊以及用戶模塊。
系統(tǒng)采用Java語言進(jìn)行開發(fā),使用MySQL數(shù)據(jù)庫進(jìn)行數(shù)據(jù)存儲,使用Java Swing、AWT來進(jìn)行可視化界面開發(fā),從而將爬取到的網(wǎng)絡(luò)小說數(shù)據(jù)直觀且盡可能人性化地展示出來[1]。其中網(wǎng)絡(luò)爬蟲技術(shù)采用目前主流的Http Client,它是Apache Jakarta Common下的子項(xiàng)目,用來提供支持HTTP協(xié)議的客戶端編程工具包[2];網(wǎng)頁解析技術(shù)采用jsoup解析器,它可以直接解析HTML文本內(nèi)容[3],能夠有效解決使用傳統(tǒng)的正則表達(dá)式解析網(wǎng)頁難度較大、開發(fā)復(fù)雜等問題。
根據(jù)需求分析,確定了系統(tǒng)功能實(shí)現(xiàn)結(jié)構(gòu)圖見圖1。
3.2.1 登錄注冊模塊
登錄注冊模塊是系統(tǒng)的進(jìn)入窗口,用戶可自行創(chuàng)建賬戶登錄,也可通過注冊時綁定的安全密碼找回密碼。
3.2.2 主功能模塊
主功能模塊主要為用戶提供不同分類的小說具體信息,例如小說名、作者、各類評價(jià)數(shù)目等。用戶可根據(jù)小說的評價(jià)數(shù)目加權(quán)篩選自己喜歡的小說。選中某本小說之后系統(tǒng)會根據(jù)小說的各類評價(jià)數(shù)目以及用戶設(shè)置的加權(quán)量給出一個具體的推薦度供用戶參考,最后可以訪問小說網(wǎng)絡(luò)地址進(jìn)行瀏覽。
3.2.3 智能搜索模塊
智能搜索模塊主要為用戶提供功能有自定義權(quán)重排序、分類篩選、模糊搜索小說。用戶可以輸入關(guān)鍵詞模糊搜索小說,系統(tǒng)將會根據(jù)小說名、作者名、簡介內(nèi)容進(jìn)行模糊匹配,然后用戶可以將搜索到的結(jié)果進(jìn)行分類查看,最后用戶還可以對評價(jià)數(shù)據(jù)進(jìn)行自定義加權(quán)排序。智能搜索模塊還具有獲取最新小說、查看閱讀榜單以及更新數(shù)據(jù)庫功能。
3.2.4 用戶個人信息模塊
用戶個人信息模塊主要顯示用戶名,用戶的默認(rèn)緩存路徑,用戶收藏表以及小說收藏表榜單。用戶可以修改默認(rèn)緩存路徑和管理收藏信息。用戶能夠看見自己的收藏榜單以及各種小說被收藏的數(shù)目,還能夠進(jìn)行分類篩選。
在系統(tǒng)運(yùn)行之前需將小說網(wǎng)站里面的所有電子小說的相關(guān)信息爬取下來并存入數(shù)據(jù)庫,以便后續(xù)的可視化界面顯示、對數(shù)據(jù)分析管理以及人性化搜索功能使用。系統(tǒng)采用Http Client技術(shù)先對其小說網(wǎng)站信息進(jìn)行請求爬取,關(guān)鍵代碼如下:
獲取到小說主頁面fictionHtml與小說評價(jià)數(shù)網(wǎng)頁gradeHtml之后,運(yùn)用jsoup解析器對其進(jìn)行解析獲取出小說名、作者、第一類別、第二類別、各類評價(jià)數(shù)據(jù)、小說ID、小說摘要、小說大小等關(guān)鍵信息存入數(shù)據(jù)庫,見圖2。
(1)注冊賬號。用戶輸入用戶名、密碼、密保提交到控制層后對其輸入的信息首先檢驗(yàn)數(shù)據(jù)合法性。合法則將相應(yīng)數(shù)據(jù)經(jīng)過MD5加鹽加密后存入數(shù)據(jù)庫,關(guān)鍵代碼:
(2)登錄系統(tǒng)。用戶輸入用戶名、密碼提交到控制層對其輸入的賬戶信息使用加密串與加密后的用戶密碼再次進(jìn)行多次MD5加鹽加密,生成不可逆加密串,最終進(jìn)行比對,如果比對正確則登錄成功,跳轉(zhuǎn)主頁面見圖3。
(3)找回密碼。若用戶忘記密碼,則可以通過該功能輸入用戶名、密保和重置密碼提交到控制層后,對其輸入的信息首先檢驗(yàn)數(shù)據(jù)合法性。合法則將用戶重置的密碼MD5加鹽加密后存入數(shù)據(jù)庫。
4.3.1 自定義權(quán)重排序
每位用戶心目中對小說的各類評價(jià)看法不一,因此用戶能夠針對小說各類的評價(jià)數(shù)據(jù)進(jìn)行自定義加權(quán)[4],系統(tǒng)將用戶加權(quán)之后算出每本小說的得分,最后排序展示。加權(quán)算法采用公式:
其中,n表示總共存在幾種評價(jià)類別,表示第i個評價(jià)類別的數(shù)據(jù),表示用戶對該評價(jià)類別的加權(quán)量。算出所有之后對小說進(jìn)行排序。
4.3.2 查看小說信息
雙擊小說列表中任意一行小說之后將展示該小說的相關(guān)信息,見圖5。推薦度計(jì)算將根據(jù)用戶提供對各類評價(jià)的加權(quán)量進(jìn)行計(jì)算推薦度,采用公式:
其中各類字母所代表的含義與4.3.1中式子一樣。用戶除了能夠查看小說推薦度和小說的相關(guān)信息以外,還能夠在其頁面瀏覽到下載小說地址和更新評價(jià)數(shù)。
4.3.3 收藏小說
收藏小說將方便用戶下次登錄系統(tǒng)快速找到喜愛的小說。用戶提交收藏請求,控制層首先校驗(yàn)數(shù)據(jù)合法性,合法則將數(shù)據(jù)存入數(shù)據(jù)庫。
4.4.1 模糊查詢
用戶輸入關(guān)鍵字提交到控制層對其數(shù)據(jù)合法性檢驗(yàn)。合法則運(yùn)用SQL查詢語句在小說的信息字段中模糊查詢[5],最后將查詢的小說展示在界面中。
4.4.2 自定義分類篩選
用戶可以將模糊查詢到的小說按照不同的分類顯示,也能夠自定義對小說各類評價(jià)數(shù)據(jù)進(jìn)行加權(quán)排序。關(guān)鍵代碼如下:
4.4.3 點(diǎn)擊榜獲取
用戶可以快速獲取到小說網(wǎng)站對應(yīng)的總點(diǎn)擊量與月點(diǎn)擊量前10篇小說,采用的是Http Client技術(shù)爬取網(wǎng)頁信息,jsoup解析其網(wǎng)頁信息,獲取對應(yīng)的榜單顯示在頁面。
4.4.4 更新小說數(shù)據(jù)庫
由于小說網(wǎng)站會隨時更新小說,而系統(tǒng)的數(shù)據(jù)庫不會隨著小說網(wǎng)站的小說更新而自動爬取,那么用戶則不能看見小說網(wǎng)站后續(xù)發(fā)布的小說。為了降低后續(xù)維護(hù)成本,即管理員定時更新數(shù)據(jù)庫,那么在用戶端可點(diǎn)擊更新小說數(shù)據(jù)庫后,系統(tǒng)將采用多線程同時利用Http Client技術(shù)爬取最新發(fā)布的小說,然后將其小說數(shù)據(jù)存入數(shù)據(jù)庫。
4.5.1 更改默認(rèn)緩存路徑
由于系統(tǒng)數(shù)據(jù)庫中含有大量的小說信息,用戶每次登錄系統(tǒng)都會到數(shù)據(jù)庫中查詢所有的小說信息,當(dāng)有大量用戶同時使用系統(tǒng)時,數(shù)據(jù)庫的壓力會增大,數(shù)據(jù)庫的查詢速度自然而然降低,還有可能造成服務(wù)器崩潰的情況。為了解決這類問題,系統(tǒng)采用緩存方式將用戶第一次登錄時查詢到的小說信息采用DES(Data Encryption Standard)對稱加密算法存入默認(rèn)緩存路徑[6],當(dāng)用戶下一次登錄時直接將數(shù)據(jù)解密后顯示出來即可。修改默認(rèn)緩存路徑需運(yùn)用Java中的JFileChooser類,用于獲取用戶新選擇的下載路徑[7]。關(guān)鍵代碼如下:
4.5.2 查看小說收藏集
用戶能夠看見自己的收藏榜單以及各種小說被收藏的數(shù)目,還能夠進(jìn)行分類篩選。用戶提交查看收藏集請求,控制層首先校驗(yàn)用戶id的合法性,合法則通過服務(wù)層調(diào)用持久層查取到用戶的收藏信息進(jìn)行封裝后顯示在頁面上。
本文系統(tǒng)的設(shè)計(jì)能夠很好地爬取到用戶需要的網(wǎng)絡(luò)小說信息,過濾掉網(wǎng)絡(luò)小說網(wǎng)站不必要的冗余信息。另外,系統(tǒng)還可以很好地滿足用戶自定義的篩選標(biāo)準(zhǔn)。采用可視化界面更直觀地反映了網(wǎng)絡(luò)小說的信息,能夠幫助用戶快速找到自己喜歡的小說進(jìn)行下載后閱讀。但由于每個網(wǎng)絡(luò)小說網(wǎng)站的網(wǎng)頁布局不同,因此jsoup解析的網(wǎng)頁標(biāo)簽也要有所改變,但通過學(xué)習(xí)了解爬蟲原理,就可以快速爬取各大網(wǎng)絡(luò)小說網(wǎng)站的小說信息。