濮文強,曹 磊,夏 斌
(上海海事大學 信息工程學院,上海 201306)
基于Django框架的關鍵詞排名監控系統設計
濮文強,曹 磊,夏 斌
(上海海事大學 信息工程學院,上海 201306)
在B2C的電商交易平臺上,商品的排名在很大程度上決定著商品的銷量,但人工查看商品排名耗費時間且效率低下。目前市場上一些第三方查詢工具不僅費用高,且查詢時間較長。為更好地監控電商商品的排名信息,設計了一款基于Web的商品排名查詢工具,實現了對商品的任意關鍵詞進行快速的排名查詢,且對已查詢的關鍵詞排名進行實時監控,定時更新其排名并提示相應變化情況。本系統主要基于Python語言進行開發,采用了Django框架進行Web平臺的搭建。將該系統部署在安全穩定的AWS亞馬遜云平臺上進行使用,經過上線測試該系統達到了預期的效果。
電商數據;排名;爬蟲;Django
亞馬遜作為當前國際的電商平臺,其擁有十多個國際站點,對于海量的商品數據,亞馬遜獨有的ASIN碼,有效地管理同一商品在不同國家的商品詳情[1]。商品的銷量和其排名情況關聯度較高,排名越靠前的商品會被更早地瀏覽及購買,因此想要更高的銷量就要對自己的商品的排名進行監控與提升。
文本旨在設計一種基于B/S結構的商品關鍵詞排名監控,用戶可建立自己的賬戶去添加在不同站點下想要查詢的商品名稱以及對應關鍵詞下的排名信息,并且系統可自動對商品排名信息進行更新并提示排名的變化指標,整個系統提供批量查詢以及管理等功能。在B/S結構下也要考慮優化用戶的體驗,系統在設計時需要將效率與準確性作為設計原則。
本系統是基于B/S(瀏覽器/服務器)結構,這種結構將系統功能實現的核心部分集中到服務器上,用戶無需下載與更新客戶端,簡化了系統的開發、維護和使用。客戶機上一個瀏覽器即可與服務器進行數據交互[2]。
系統由Web框架Django搭建而成,Django是開源的Web應用框架,由Python語言開發,采用了MVC的設計模式,將業務邏輯層、前端視圖層、數據模型層以高內聚低耦合實現開發。采用Django可以簡便、高效地開發基于數據庫驅動的網站。Django的優點是:(1)ORM對象關系映射,便捷的數據模型設計與交互;(2)管理員的管理界面;(3)URL匹配;(4)可擴展的模板語言;(5)表單模型;(6)Cache系統;(7)內置國際化[3]。
前端主要采用HTML、Javascript、Query、bootstrap相結合,具有簡單明了的數據顯示以及更方便的用戶操作。
系統結構及邏輯流程如圖1所示。

圖1 系統組成結構及邏輯流程圖
該系統模塊主要分為以下七個部分。
(1)注冊登錄模塊
提供用戶注冊與登錄,每一個用戶擁有自己的商品排名信息庫,用以保留每個用戶查詢記錄以及管理商品查詢記錄,使得用戶能更高效、快捷地管理自己的所關注的商品信息排名。
(2)查詢商品名稱模塊
由于相同的商品在不同國家的站點下商品名稱不一樣,本系統采用亞馬遜提供的ASIN碼去查詢商品名稱。
(3)查詢排名模塊
系統業務的核心功能,用戶可自定義多個關鍵詞去查詢商品在不同關鍵詞下的排名情況。
(4)文件上傳模塊
用戶可通過模板文件一次多個產品及對應關鍵詞,一次性查詢多個商品的排名信息,查詢結果可下載。
(5)定時更新模塊
通過定時任務對數據庫中所有用戶的商品進行關鍵詞排名的更新,并分析與之前的排名變化趨勢。
(6)分頁管理模塊
用戶可以查看到自己所有的查詢記錄以及變化趨勢,對其進行增刪改查等操作。
(7)多線程網絡爬蟲模塊
針對一個商品多個關鍵詞同時查詢的情況,創建對應個數的線程對排名數據進行抓取,避免同步逐個關鍵詞查詢而造成等待時間過長。大幅度地提高爬蟲抓取信息的效率,提高用戶的體驗。
用戶在第一次進入系統時需要先注冊,這是為了能對該用戶所查詢的商品進行記錄與更新,登錄完成之后,用戶采用商品的ASIN首先查詢在對應站點下的商品名稱,而不是用商品名稱去查詢,這是為了讓該系統可以服務于所有的站點。查詢到商品名稱后,即可以自定義添加多個關鍵詞去查詢在該關鍵詞下的排名情況,在短暫的查詢過程后,將結果顯示在Web前端上,并且這些商品以及對應的關鍵詞都會被保存到數據庫中,用于定時地更新這些排名數據,并在用戶下次進行查詢時直接將更新結果顯示了出來,而不需要再去等待查詢結果就可以獲取到最新的排名數據。用戶在第二次登錄之后就顯示其查詢的歷史記錄,不僅可以提高用戶的查詢效率,更減輕了服務器的實時壓力。系統數據處理流程圖如圖2所示。

圖2 系統數據處理流程圖
2.1.1數據獲取的方法
在沒有官方提供的數據以及相關API接口調用的情況下,網絡爬蟲是獲取網頁數據信息的有力方法,也是該系統查詢業務的核心。網絡爬蟲具有開發效率短、易編寫、準確率高的特點。
2.1.2多線程爬蟲實現
多線程是指從軟件或者硬件上實現多個線程并發執行的技術,能夠在同一時間執行多個任務,進而提升整體處理效率。Python提供了threading對多線程的支持,同步鎖通過my_lock = threading.RLock()進行獲取,threading.join()將子查詢線程保護,以便在子查詢線程沒有結束而執行主線程,因為主線程需要子線程所得出的數據。threading.setDaemon()將線程聲明為守護線程,必須在start() 方法調用之前設置,如果不設置為守護線程,程序會被無限掛起。threading.start()用以啟動線程。
由于多個線程之中處理的關鍵詞不同以及不同商品關鍵詞數量不同,寫入到的數據庫位置也不相同,因此系統還需要對不同的線程進行標志以及與創建的線程數量進行對應,以保證數據寫入的準確性。在遍歷關鍵詞的列表時,通過獲取關鍵詞的下標來標識是第幾個關鍵詞,再依次遍歷進行創建線程,保證線程數量的正確性。
系統采用基礎單線程爬蟲對商品的名稱進行獲取,通過用戶輸入的ASIN碼以及選擇的站點在后臺拼接成對應的URL,對該URL進行request請求,再對返回的響應信息采用對應的正則表達式抓取到商品名稱。當用戶添加多個關鍵詞以及用戶上傳文件時,由于獲取的是多個信息,此時采用多線程網絡爬蟲,多線程以一種并發的形式去執行任務,提高爬蟲的效率,縮短任務時間。但是多線程之間共享變量,在保存數據到數據庫進行寫入操作時,會覆蓋掉其他寫入操作,導致查詢結果只有一個關鍵詞排名被寫入到數據庫中。本系統采用多線程鎖的機制,當每個關鍵詞排名結果信息需對數據庫進行操作時,則加上鎖,保證該時刻開始到數據寫入結束,只有該線程可以對數據庫進行操作,保證了數據庫的一致性。
2.1.3數據抓取的正則表達式
正則表達式是計算機科學的一個概念。正則表通常被用來檢索、替換那些符合某個模式(規則)的文本。對于信息的抓取,原理是對相應的HTML源代碼采用正則表達式去檢索所需信息。例如商品對應的商品名為The Paw for Dogs,Large。在網頁的源代碼中,在
2.1.4排名數據抓取的實現
已經通過ASIN以及選擇站點查詢到對應的商品名稱,這時將用戶所提交的關鍵詞以及對應該商品的站點構建成頁面URL,該RUL是具有page屬性的,也就是具有翻頁的功能,通過對相應頁面的信息與商品名稱進行對比,若當前頁沒有匹配到,則跳轉到下一頁繼續匹配,若跳轉到商品的第六頁時依然沒有匹配到,認為該商品排名比較靠后。排名的準確數據是通過匹配的頁數以及在當前頁的排名次第計算而來的。即排名=(前頁數-1)×每頁的商品數量+匹配頁名次。
系統設計排名數據離不開數據庫,采用MySQL數據庫用于存儲數據,其體積小,速度快,總體成本低,特別是開源的特點使得MySQL作為一般網站首選的數據庫。
本系統的Django框架將把數據庫的操作封裝成ORM(對象關系映射)類對應表,屬性對應字段,對象對應記錄,使開發者更注重于表的定義與操作,而不是SQL(結構化查詢語句)[4]。可在系統的setting.py中配置數據庫參數,在model.py中定義相應的class,運行python manage.py syncdb,即可在數據庫中生成相應的表。系統的表定義為Loginuser(用戶表),該表主要存儲所有用戶的信息,也是用于數據庫多表查詢時的外鍵表;Showproduct(商品顯示表)前端顯示用戶所查詢的商品以及所添加的關鍵詞;Upfile(上傳文件記錄表)用于查詢上傳文件商品排名信息,便于用戶下載;ProductRank(商品排名信息表)記錄所有用戶每一天的所有商品關鍵詞排名信息,用于展示排名數據以及定時任務。
系統的外鍵關聯表關系圖如圖3所示。

圖3 系統外鍵關聯表關系圖
2.3.1Django定時模塊的原理
Django框架的定時功能主要是利用celery模塊實現[5]。這個模塊實現方便只需要配置好定時的時間與任務即可,在setting文件中配置好定時的參數以及安裝對應的插件,再創建task.py文件,將定時的任務代碼函數編寫在里面,但是需要加上裝飾器@task才能將函數從普通函數包裝成定時的函數,在程序運行時會自動掃描該文件。Django框架的管理員界面可以更快地對定時任務的時間以及任務進行調整。
2.3.2系統定時的實現
本文設計的系統中通過檢索數據庫對所有用戶的商品排名數據進行定時的更新。首先讀取當前日期,并對日期減去一天得到昨天的數據,將昨天的數據的基本信息以今天的日期寫入到數據庫中,多線程爬蟲去獲取此刻的排名情況,并與昨天的排名進行比較,將趨勢也寫入到今日的記錄中去,實現排名的更新操作。
AJAX(Asynchronous Javascript And XM)是一種交互式網頁應用的網頁開發,通過少量數據即可實現后臺與服務器的交互,使網頁實現異步加載,簡單地說就是可以在不重新加載整個頁面即可更新頁面的數據[6]。
本系統在效率原則下在關鍵詞排名查詢時采用AJAX技術,將商品的ID序號POST到后臺,后臺接受這個ID,對應數據庫找到對應商品,此時數據庫中已經有關鍵詞,將這條數據取出,再進行關鍵詞排名抓取,將結果傳到前段進行解析。整個過程數據提供輕量級JSON格式進行傳輸,并沒有頁面刷新,減輕了服務器壓力,在多用戶訪問時不會出現等待情況,優化了體驗效果。
系統登錄模塊可實現將注冊用戶信息存入數據庫中,并且驗證用戶信息是否正確。
通過ASIN碼以及站點的商品名稱查詢,驗證出查詢的準確性,如圖4所示。

圖4 系統外鍵關聯表關系圖
系統定時模塊對數據排名進行對比,得出趨勢,如圖5所示。

圖5 關鍵詞排名變化趨勢圖
在沒有官方的數據獲取API的情況下,基于網絡爬蟲來獲取排名數據,利用Web框架搭建服務器方便快速地查詢,并且定時監控排名變化趨勢,既方便了使用者的操作,也節省了時間。系統的創新在于將傳統的C/S結構轉變為B/S結構,節省了客戶端的維護更新,優化了用戶體驗;其次是充分利用亞馬遜平臺所提供的ASIN碼實現跨國家站點的數據查詢,不再是只能針對一個站點進行查詢;最后將系統搭建在AWS的云平臺上,可服務于所有的用戶。經過多次實驗驗證,本系統基本實現了設計目標,在完成各項功能的同時優化了用戶體驗,提高了效率。
[1] GOPALPUR C C, HALE C C. Online marketplace management system with automated pricing tool[P]. US: US7774238,2010-08-10.
[2] 張友生,陳松喬.ClS與BlS混合軟件體系結構模型[J].計算機工程與應用,2002,38(23):138-140.
[3] 劉班.基于Django快速開發Wed應用[J].電腦知識技術,2009,5(7):1616-1618.
[4] 王冉陽.基于Django和ORM的Web開發[J].電腦編程技巧與維護, 2009, 5(2):56-58.
[5] SINGHAL N, DIXIT A, SHARMA A K. Design of a priority based frequency regulated incremental crawler[M]. LAP LAMBERT Academic Publishing, 2014.
[6] CRANE D, PASCARELLO E, JAMES D. Ajax in Action[M]. Manning Publications Co., 2005.
Design of keyword ranking monitor system based on Django framework
Pu Wenqiang, Cao Lei, Xia Bin
(College of Information Engineering, Shanghai Maritime University, Shanghai 201306, China)
On electronic business trading platform of B2C, the ranking of goods determines the sales of goods to a large extent, but viewing the product ranking artificially is time-consuming and inefficient. At present some third-party query tools in the market are expensive, and the query time is long. In order to monitor the ranking information of electronic business goods better, this paper designs a Web-based goods ranking query tool, to achieve a quick ranking query using any keyword of the goods, monitor the keyword ranking queried in real time, update the ranking regularly and prompt the corresponding changes. The system is developed based on Python language, using Django framework for Web platform structure. The system is deployed on AWS Amazon Cloud platform which is secure and stable, and achieves the desired results after online test.
electronic business data; ranking; the crawler; Django
TQ35
A
10.19358/j.issn.1674- 7720.2017.20.027
濮文強,曹磊,夏斌.基于Django框架的關鍵詞排名監控系統設計[J].微型機與應用,2017,36(20):97-100.
2017-03-24)
濮文強(1994-),男,碩士研究生,主要研究方向:商務數據挖掘與處理。
曹磊(1989-),男,博士研究生,主要研究方向:腦機接口與智能信息處理。
夏斌(1975-),通信作者,男,博士,副教授,碩士生導師,主要研究方向:腦-機接口、云計算及人工智能。E-mail:binxia@shmtu.edu.cn。