夏志富1,王晗璐1,李玉平1,曹磊2,夏斌1
?。?. 上海海事大學(xué) 信息工程學(xué)院,上海 201306; 2. 同濟(jì)大學(xué) 電子與信息工程學(xué)院,上海 201804)
摘要:隨著電子商務(wù)的迅速發(fā)展,商品在電商平臺(tái)的排名變化信息愈來(lái)愈受到大家的關(guān)注。市場(chǎng)上現(xiàn)有的排名查詢工具主要是基于C/S構(gòu)架,因?yàn)殡娚唐脚_(tái)的變化,需要頻繁更新軟件,使用較為不便。為了方便用戶對(duì)商品排名信息的查詢?cè)O(shè)計(jì)出一種基于B/S框架的排名查詢工具。該工具實(shí)現(xiàn)了同一商品的多關(guān)鍵詞實(shí)時(shí)排名查詢,并且能夠讓用戶自定義產(chǎn)品監(jiān)控列表并對(duì)列表中的產(chǎn)品排名變化情況進(jìn)行長(zhǎng)期監(jiān)控。本系統(tǒng)構(gòu)架采用Django來(lái)設(shè)計(jì),主要功能采用Python 2.7 語(yǔ)言來(lái)開(kāi)發(fā),云端采用穩(wěn)定便捷的亞馬遜公司的AWS云計(jì)算平臺(tái)進(jìn)行服務(wù)器端的部署和搭建,經(jīng)過(guò)上線測(cè)試后發(fā)現(xiàn)系統(tǒng)達(dá)到了良好的效果。
關(guān)鍵詞:電子商務(wù); 爬蟲(chóng); 文本相似度; 云計(jì)算
0引言
同濟(jì)大學(xué)嵌入式系統(tǒng)與服務(wù)計(jì)算教育部重點(diǎn)實(shí)驗(yàn)室開(kāi)放課題電子商務(wù)的興起促進(jìn)了跨境貿(mào)易的發(fā)展,作為當(dāng)前最流行的跨境電商平臺(tái),阿里巴巴擁有數(shù)量龐大的用戶群體,約有40萬(wàn)家電子商務(wù)公司入駐阿里巴巴平臺(tái)。平臺(tái)上每家公司商品的銷量與其商品在阿里平臺(tái)上的排名情況緊密相連。商品排名越靠前,關(guān)注度就越高,銷量就會(huì)更好。因此提升商品排名是提升銷量的重要手段。
目前關(guān)于阿里國(guó)際站的產(chǎn)品排名查詢工具主要有兩類,一類是阿里后臺(tái)提供的排名查詢工具,但這個(gè)工具只能一次查詢一個(gè)關(guān)鍵詞,使用起來(lái)不太方便而且沒(méi)有自定義關(guān)鍵詞查詢排名功能。另外一類就是由第三方公司提供的排名查詢工具,但主要是C/S構(gòu)架,需要安裝客戶端軟件。因?yàn)榘⒗锇桶头?wù)器經(jīng)常會(huì)有變化,所以客戶端軟件也需要經(jīng)常更新,給用戶使用過(guò)程中帶來(lái)不便。并且此類軟件不具備長(zhǎng)期追蹤產(chǎn)品排名變化的功能,公司不能及時(shí)了解自己商品排名變化情況。因此本文設(shè)計(jì)了一個(gè)基于B/S構(gòu)架的產(chǎn)品排名查詢及監(jiān)控系統(tǒng),用戶通過(guò)瀏覽器登錄本系統(tǒng)就可以進(jìn)行商品排名查詢,并且可以長(zhǎng)期追蹤商品排名變化情況。
1系統(tǒng)設(shè)計(jì)
1.1系統(tǒng)架構(gòu)
系統(tǒng)基于Django架構(gòu)[1]的MVC模式:分為Model層、View層、Control層,將業(yè)務(wù)邏輯、顯示邏輯和數(shù)據(jù)邏輯以低耦合、高復(fù)用的形式展現(xiàn)出來(lái),便于系統(tǒng)后期的擴(kuò)展和維護(hù)。
在View層,利用Django自帶的模板系統(tǒng)[2]跟前端開(kāi)源框架Bootstrap結(jié)合,增強(qiáng)用戶的交互體驗(yàn)和提高前端頁(yè)面開(kāi)發(fā)效率。在Model層,系統(tǒng)采用MySQL關(guān)系型數(shù)據(jù)庫(kù),并利用Django的ORM機(jī)制將MySQL中的數(shù)據(jù)以對(duì)象接口的方式進(jìn)行封裝,極大方便了數(shù)據(jù)的查詢和操作。在Control層,系統(tǒng)控制器通過(guò)分析請(qǐng)求、邏輯判斷、模型操作以及重定向視圖等將整個(gè)系統(tǒng)業(yè)務(wù)流串聯(lián)起來(lái)。系統(tǒng)結(jié)構(gòu)及邏輯流程如圖1所示。
1.2系統(tǒng)功能結(jié)構(gòu)
該系統(tǒng)功能主要分為三個(gè)部分。
?。?)顯示邏輯模塊
系統(tǒng)前端靜態(tài)頁(yè)面利用前端開(kāi)源框架Bootstarp實(shí)現(xiàn),里面內(nèi)置了豐富的CSS樣式庫(kù),可以快遞開(kāi)發(fā)優(yōu)美的頁(yè)面。系統(tǒng)動(dòng)態(tài)頁(yè)面采用Javascript開(kāi)源框架Jquery實(shí)現(xiàn),能夠很方便地操控鼠標(biāo)點(diǎn)擊事件和后臺(tái)數(shù)據(jù)的異步傳輸。
?。?)業(yè)務(wù)邏輯模塊
用戶注冊(cè)登錄后輸入商品名稱就可以直接檢索出該商品對(duì)應(yīng)的3個(gè)關(guān)鍵詞,并可以在下拉框中選擇備選商品,或者刪除備選商品。當(dāng)用戶輸入商品名發(fā)生錯(cuò)誤時(shí)可以通過(guò)糾錯(cuò)機(jī)制告知用戶,并利用相似度算法[3]自動(dòng)從數(shù)據(jù)庫(kù)中匹配出最相近的商品名,減少用戶輸入時(shí)間。在批量導(dǎo)入查詢模塊中,用戶可以上傳txt格式的待查詢商品名文件,系統(tǒng)會(huì)自動(dòng)檢索出其排名結(jié)果,并以Excel格式供用戶下載查看。在管理產(chǎn)品頁(yè)面中,用戶可以添加和刪改監(jiān)控的商品并觀察商品排名的變化趨勢(shì),可以按時(shí)間段選擇商品在指定日期的排名變化情況。
?。?)數(shù)據(jù)邏輯模塊
通過(guò)后臺(tái)Celery定時(shí)任務(wù)設(shè)定閑時(shí)爬取數(shù)據(jù)[4],定期自動(dòng)地通過(guò)多線程并發(fā)更新數(shù)據(jù),并在后臺(tái)服務(wù)器計(jì)算好商品排名的變化情況,以便用戶可以立即從數(shù)據(jù)庫(kù)中調(diào)取數(shù)據(jù)查看,無(wú)需等待時(shí)間。
1.3數(shù)據(jù)處理流程
在查詢頁(yè)面中進(jìn)行商品查詢時(shí),如果用戶是首次查詢某個(gè)商品則系統(tǒng)進(jìn)行實(shí)時(shí)商品排名查詢,并將排名信息存入數(shù)據(jù)庫(kù)。這些信息被保存下來(lái)以后,系統(tǒng)后臺(tái)設(shè)置了每天定時(shí)任務(wù),會(huì)在設(shè)定的時(shí)間閑時(shí)爬取數(shù)據(jù)以更新排名和排名變化情況。當(dāng)用戶輸入以前查詢過(guò)的商品名時(shí)就可以直接從數(shù)據(jù)庫(kù)中調(diào)取其排名和排名變化數(shù)據(jù),這樣可以減少服務(wù)器在同一時(shí)間的壓力,提升系統(tǒng)查詢的響應(yīng)速度。系統(tǒng)數(shù)據(jù)處理流程圖如圖2所示。
2系統(tǒng)實(shí)現(xiàn)
2.1獲取數(shù)據(jù)資源
網(wǎng)絡(luò)爬蟲(chóng)是獲取數(shù)據(jù)最快速有效的方法,是構(gòu)建搜索引擎最重要的組成部分之一,通過(guò)對(duì)阿里國(guó)際站點(diǎn)爬蟲(chóng)獲取數(shù)據(jù)是該系統(tǒng)構(gòu)建的基礎(chǔ)。
本系統(tǒng)獲取商品數(shù)據(jù)分為以下流程。
?。?)通過(guò)用戶輸入的商品名在數(shù)據(jù)庫(kù)中檢索出其對(duì)應(yīng)的關(guān)鍵詞,根據(jù)其關(guān)鍵詞匹配出對(duì)應(yīng)搜索結(jié)果的URL列表集合。
?。?)通過(guò)Python多線程爬蟲(chóng)[5]獲取到URL列表集合對(duì)應(yīng)的網(wǎng)頁(yè)源代碼,并對(duì)每個(gè)網(wǎng)頁(yè)源代碼打好標(biāo)記后裝載于queue隊(duì)列中,以便后面將數(shù)據(jù)以原順序展示出來(lái)。
?。?)取出queue隊(duì)列里的網(wǎng)頁(yè)源代碼,并使用Xpath解析工具通過(guò)多線程方式去解析網(wǎng)頁(yè)源代碼得到商品數(shù)據(jù)列表,然后通過(guò)原先打好的標(biāo)記對(duì)商品數(shù)據(jù)列表按照原網(wǎng)頁(yè)索引排序,最終得到以原順序輸出的商品列表,最后通過(guò)列表索引計(jì)算排名。
2.2數(shù)據(jù)庫(kù)設(shè)計(jì)
系統(tǒng)中利用Django ORM對(duì)象設(shè)定表之間的外鍵關(guān)聯(lián),建立好數(shù)據(jù)之間的從屬關(guān)系,從而方便通過(guò)條件篩選出對(duì)應(yīng)的數(shù)據(jù)。本系統(tǒng)創(chuàng)建了8個(gè)數(shù)據(jù)表,主要通過(guò)loginuser(用戶信息表)和middleuser(查詢圖3系統(tǒng)外鍵關(guān)聯(lián)表關(guān)系圖
中間鍵表)作為橋梁與其他數(shù)據(jù)表建立外鍵關(guān)聯(lián)。通過(guò)loginuser表與其他表關(guān)聯(lián)使得用戶的查詢和數(shù)據(jù)信息管理可以通過(guò)外鍵把數(shù)據(jù)獨(dú)立起來(lái),形成以每個(gè)用戶為單元的數(shù)據(jù)塊,以便于信息的維護(hù)和查詢速度的優(yōu)化。通過(guò)middleuser表和其他表的關(guān)聯(lián)可以使得用戶的下拉輸入框查詢變得容易處理,減少了前端javascript的交互邏輯,并且能夠記錄好用戶備選框中已經(jīng)添加了但還未得到查詢結(jié)圖4系統(tǒng)測(cè)試樣例圖果的商品列表,方便用戶下次直接一鍵查詢。
系統(tǒng)的外鍵關(guān)聯(lián)表關(guān)系圖如圖3所示。
2.3基于TF-IDF算法的相似度糾錯(cuò)檢測(cè)
2.3.1TF-IDF算法的原理
TF-IDF(Term FrequencyInverse Document Frequency)是一種用于信息搜索和信息挖掘的常用加權(quán)技術(shù)[3]。TFIDF模型的主要思想是:用一個(gè)具有很強(qiáng)區(qū)分能力的詞w將文章d與其他文章區(qū)分開(kāi)來(lái),該詞必須具備以下條件:在d文章中有很高的出現(xiàn)頻率并且該詞在其他文檔中較少出現(xiàn)。該模型主要包含了兩個(gè)因素:
(1)詞w在文檔d中的詞頻TF(Term Frequency),即詞w在文檔d中出現(xiàn)次數(shù)count(w, d)和文檔d中總詞數(shù)size(d)的比值:
tf(w,d)=count(w,d)/size(d)(1)
(2)詞w在整個(gè)文檔集合中的逆向文檔頻率idf (Inverse Document Frequency)[6],即文檔總數(shù)n與詞w所出現(xiàn)文件數(shù)docs(w,D)比值的對(duì)數(shù):
idf=log(n/docs(w,D))(2)
查詢串q與文檔d的匹配度可以由一個(gè)權(quán)重表示,該權(quán)重是通過(guò)tfidf模型為每一個(gè)文檔d和由其關(guān)鍵詞w[1]…w[k]組成的查詢串q計(jì)算出來(lái)的:
tf-idf(q,d)
=sum{i=1..k/tf-idf(w[i],d)}
=sum{i=1..k/tf(w[i],d)*idf(w[i])}(3)
2.3.2相似度檢測(cè)的實(shí)現(xiàn)
系統(tǒng)利用Python自然語(yǔ)言處理中的開(kāi)源框架Gensim可以對(duì)文本進(jìn)行分詞,再對(duì)分詞進(jìn)行向量化處理并自動(dòng)提取特征,利用這些向量化特征構(gòu)建TFIDF算法的模型從而計(jì)算出兩個(gè)文本之間的余弦?jiàn)A角[7],夾角越小則相似度越高。按照此原理把用戶輸入的商品名與該用戶對(duì)應(yīng)的店鋪所有商品名進(jìn)行TFIDF算法的相似度對(duì)比,對(duì)比值放在列表中,取出其最大值,則可得到相似度最大的商品名,實(shí)現(xiàn)了用戶的糾錯(cuò)檢測(cè)功能。
3系統(tǒng)測(cè)試
通過(guò)上線測(cè)試和每天監(jiān)控商品排名數(shù)據(jù)的變化情況,發(fā)現(xiàn)系統(tǒng)達(dá)到了預(yù)期效果。后臺(tái)定時(shí)爬蟲(chóng)任務(wù)的數(shù)據(jù)能夠保證每天的更新,并且正常穩(wěn)定運(yùn)行。數(shù)據(jù)能夠準(zhǔn)確地反映真實(shí)商品的排名情況,并且能夠計(jì)算出每天的商品排名變化,通過(guò)手動(dòng)方式查詢對(duì)比符合真實(shí)情況的排名變化結(jié)果。系統(tǒng)部分測(cè)試效果如圖4所示。
4結(jié)論
通過(guò)將商品數(shù)據(jù)自動(dòng)抓取下來(lái),并利用Django框架開(kāi)發(fā)出一個(gè)智能化的商品排名監(jiān)控系統(tǒng),能有效監(jiān)控商品排名及其變化趨勢(shì),大大節(jié)約了眾多店鋪商的手工查詢時(shí)間,幫助他們實(shí)現(xiàn)更好的收益。本文利用互聯(lián)網(wǎng)技術(shù)簡(jiǎn)化了電子商務(wù)平臺(tái)上的繁雜性工作,并把相似度算法應(yīng)用于用戶輸入檢測(cè),便于輸入信息的檢索,實(shí)現(xiàn)了商務(wù)數(shù)據(jù)監(jiān)控的智能化。本系統(tǒng)能夠?qū)惩怆娚藤Q(mào)易者提供極大的便利,有很強(qiáng)的應(yīng)用價(jià)值。
參考文獻(xiàn)
?。?] 柴慶龍, 謝剛, 陳澤華, 等. 基于Django框架的故障診斷和安全評(píng)估平臺(tái)[J].電子技術(shù)應(yīng)用, 2015,43(4):1921.
[2] 王曉斌,閆果,基于Django開(kāi)發(fā)的橋梁健康監(jiān)控?cái)?shù)據(jù)查詢的Web應(yīng)用[J].電子技術(shù)與軟件工程,2009,24(4):2324.
[3] XU W, CALLISONBURCH C, DOLAN W B. SemEval2015 task 1: Paraphrase and semantic similarity in Twitter (PIT)[C].Proceedings of the 9th International Workshop on Semantic Evaluation (SemEval), 2015.
?。?] DETTINGER R D, KOLZ D P, STEVENS R J, et al. Automated data model extension through data crawler approach[P]. US: US8165989, 2012.
?。?] SINGHAL N, DIXIT A, SHARMA A K. Design of a priority based frequency regulated incremental crawler[M]. LAP LAMBERT Academic Publishing, 2014.