• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Scrapy和Elasticsearch的校園網(wǎng)搜索引擎的研究與實現(xiàn)

      2019-12-10 08:06莊旭菲田雪
      科技資訊 2019年29期
      關(guān)鍵詞:爬蟲分詞校園網(wǎng)

      莊旭菲 田雪

      摘 ?要:針對通用搜索引擎無法及時收錄校園網(wǎng)內(nèi)信息和收錄時間滯后的問題,基于Scrapy框架和Elasticsearch全文搜索引擎,提出了一個完善的校園網(wǎng)搜索引擎解決方案。該文主要分析了Scrapy的運行流程,對Elasticsearch的搜索機制進行了研究,在此基礎上設計了校園網(wǎng)搜索引擎的系統(tǒng)架構(gòu),給出了系統(tǒng)的網(wǎng)頁抓取模塊、索引檢索模塊、頁面展示模塊的關(guān)鍵實現(xiàn)技術(shù)。最后通過實驗驗證,相比于傳統(tǒng)的通用搜索引擎,該文設計的校園網(wǎng)搜索引擎的搜索結(jié)果相關(guān)性更好,數(shù)量更多,對于校園網(wǎng)內(nèi)新信息的收錄情況更好。

      關(guān)鍵詞:校園網(wǎng)搜索引擎 ?Scrapy ?Elasticsearch ?中文分詞

      中圖分類號:TP391.3;TP393.18 ? 文獻標識碼:A 文章編號:1672-3791(2019)10(b)-0012-04

      近年來,隨著高校數(shù)字化校園建設的不斷加快,校園網(wǎng)絡信息呈現(xiàn)出爆炸式增長。高校校園內(nèi)網(wǎng)站的網(wǎng)絡拓撲情況復雜,分布于不同技術(shù)架構(gòu)的服務器上,如果采用傳統(tǒng)的站內(nèi)搜索算法及存儲結(jié)構(gòu),難于實現(xiàn)高效、精準的校園網(wǎng)搜索引擎。而由于校園內(nèi)網(wǎng)站多數(shù)使用二級域名或者直接使用IP地址訪問,導致傳統(tǒng)的通用搜索引擎無法準確、及時地收錄校園網(wǎng)內(nèi)信息[1]。

      為了解決現(xiàn)階段網(wǎng)絡搜索引擎在校園網(wǎng)應用中存在的問題,該文對網(wǎng)絡搜索引擎的核心原理、關(guān)鍵技術(shù)和工作流程進行了深入分析,結(jié)合URL去重策略、防止爬蟲被禁止策略、文本分詞等多門技術(shù),提出了一個基于Scrapy爬蟲框架和Elasticsearch全文搜索引擎的校園網(wǎng)搜索引擎設計方案,并使用Django框架實現(xiàn)了搜索引擎的用戶搜索界面。

      該文最后的實驗結(jié)果表明,相比于傳統(tǒng)的通用搜索引擎,該文設計的校園網(wǎng)搜索引擎能夠及時、準確地進行校園網(wǎng)信息搜索,搜索結(jié)果的相關(guān)性、準確性及數(shù)量級要高于傳統(tǒng)的通用搜索引擎。

      1 ?搜索引擎中的關(guān)鍵技術(shù)研究

      1.1 Scrapy爬蟲框架

      Scrapy框架是基于異步I/O的twisted框架,所以Scrapy應用在網(wǎng)絡爬蟲時性能非常高。Scrapy方便擴展,提供了很多內(nèi)置功能,這些功能可以加快開發(fā)速度。Scrapy主要包含引擎(Scrapy Engine)、調(diào)度器(Scheduler)、下載器(Downloader)、爬蟲(Spiders)、項目管道(Item Pipeline)、下載器中間件(Downloader Middlewares)、爬蟲中間件(Spider Middlewares)等組件[2]。

      Scrapy的運行流程可以簡單理解為:引擎若獲取到應答包則發(fā)送給爬蟲,若獲取到實體則發(fā)送給實體管道,若獲取到請求則發(fā)送給調(diào)度器。引擎不停地從調(diào)度器中取出鏈接,封裝成requests發(fā)送給下載器,這個過程不斷往復循環(huán)就是Scrapy的數(shù)據(jù)流向。

      1.2 Elasticsearch全文搜索引擎

      Elasticsearch是基于Lucene的開源搜索服務器,它在Lucene的基礎上做了改進,提供了多種語言接口,使搜索變的更加簡單[3]。近年來隨著實時日志分析平臺(ELK)的廣泛使用,Elasticsearch也變得越來越流行。

      Elasticsearch既有數(shù)據(jù)的存儲,又有數(shù)據(jù)的分析,是當前流行的企業(yè)級搜索引擎。當前使用Elasticsearch作為搜索引擎的公司有聯(lián)想微軟、Facebook、GitHub和Adobe等。

      Elasticsearch的核心功能是搜索,如圖1所示,描述了將文檔索引到Elasticsearch并從Elasticsearch中搜索到該文檔的全過程。圖1將坐標系分為4個象限,第一到第四象限分別代表了用戶、原始文檔、Elasticsearch和搜索結(jié)果。

      索引過程:存在如第二象限所示的原始文檔,它包括title與content兩個字段。在將文檔寫入到Elasticsearch中時,Elasticsearch默認會保存兩份內(nèi)容,一份是該文檔的原始內(nèi)容,即_source中的內(nèi)容;另一份是索引時經(jīng)分詞、過濾等一系列過程生成的倒排索引文件。

      搜索過程:第一象限的用戶輸入關(guān)鍵詞python對文檔進行搜索,Elasticsearch接收到查詢關(guān)鍵詞python后到倒排索引表中查詢,通過倒排記錄表找到關(guān)鍵詞對應的文檔集合,然后對文檔集合進行評分、排序、高亮處理,最后將搜索結(jié)果返回給用戶。

      2 ?校園網(wǎng)搜索引擎的設計與實現(xiàn)

      校園網(wǎng)搜索引擎分為三大模塊[4,5],分別為網(wǎng)頁抓取模塊:通過采取一定的策略從互聯(lián)網(wǎng)上抓取網(wǎng)頁信息;索引檢索模塊:對獲取到的網(wǎng)頁信息建立快速高效的索引,便于檢索;頁面展示模塊:將搜索結(jié)果按評分高低進行排序,展現(xiàn)給用戶。

      2.1 網(wǎng)頁抓取模塊

      在進行網(wǎng)頁抓取之前,首先需要分析待爬取網(wǎng)站的URL結(jié)構(gòu),選取適合的網(wǎng)頁搜索策略進行數(shù)據(jù)爬取,例如深度優(yōu)先策略、廣度優(yōu)先策略、非完全PageRank策略等。獲取到返回的網(wǎng)頁信息后,進入解析函數(shù)進行具體字段的提取,提取的字段信息需要在items.py數(shù)據(jù)容器文件中定義。

      2.1.1 URL去重策略

      在進行數(shù)據(jù)抓取時,若不進行URL去重,不僅會降低爬蟲的效率,還會造成硬件資源的浪費。Scrapy框架默認的URL去重方法由dupefilters去重器里的RFPDupeFilter類實現(xiàn),RFPDupeFilter類會對每一個傳遞過來的request請求生成信息指紋fp。這種URL去重方法唯一確定了一個request所指向的資源,但是這種去重方法比較耗費內(nèi)存,采用布隆過濾器則可以改進內(nèi)存耗費大的問題,但布隆過濾器有時會存在“積極的”誤判[6]。相比于互聯(lián)網(wǎng)資源,校園網(wǎng)內(nèi)的信息量較少,采用Scrapy框架默認的URL去重方法已經(jīng)足夠。

      2.1.2 防止爬蟲被禁止策略

      爬蟲與反爬蟲的對抗機制長期存在,為了防止爬蟲被禁止,需要采取相應的策略[7]。(1)隨機更換user-agent。該文采用fake-useragent開源庫,利用其內(nèi)部維護的user-agent列表,實現(xiàn)隨機更換user-agent。(2)啟用自動限速(Auto Throttle)擴展。通過設置setting.py文件中的“AUTOTHROTTLE_ENABLED=True”即可啟用自動限速擴展,通過啟用自動限速擴展以及對相應參數(shù)的設置,可以有效地限制爬蟲的爬取速度。

      2.2 索引檢索模塊

      在網(wǎng)頁抓取模塊中,已經(jīng)從頁面解析函數(shù)中獲取到了返回的item對象,此時需要在pipeline中使用Elasticsearch-dsl將爬蟲爬取到的數(shù)據(jù)保存到Elasticsearch中。Elasticsearch的兩大主要任務是:索引文檔與搜索文檔。索引文檔是將爬蟲爬取到的數(shù)據(jù)分詞并構(gòu)建倒排索引,搜索文檔是將用戶輸入的關(guān)鍵詞分詞,匹配出倒排索引中的文檔。

      分詞技術(shù)是搜索引擎開發(fā)中的重要組成部分,它可以提高搜索結(jié)果的匹配度。Elasticsearch本身的分詞功能是針對英文的,對于中文分詞的支持不是很友好。該文使用插件ik提供的ik_max_word分詞器,可以對文本進行最大數(shù)量的分詞,即將文本做最細粒度的拆分。

      2.3 頁面展示模塊

      該文利用Elasticsearch提供的Completion Suggester接口完成搜索建議功能。核心思想是:在index.html里編寫一個函數(shù)用于綁定輸入框的input事件,當input發(fā)生變化時,調(diào)用get方法獲取到用戶輸入的查詢關(guān)鍵詞,并向后臺處理搜索建議的URL發(fā)起請求。

      當用戶在搜索引擎界面輸入查詢關(guān)鍵詞,點擊搜索按鈕進行查詢時,搜索結(jié)果頁面會顯示查詢到的搜索結(jié)果、用戶的搜索記錄、搜索熱詞、爬取到的網(wǎng)站的數(shù)據(jù)量和當前系統(tǒng)的訪問量。處理用戶搜索的核心思想是:當用戶點擊搜索按鈕時,調(diào)用add_search方法,獲取用戶輸入的查詢關(guān)鍵詞,并向后臺處理用戶搜索的URL發(fā)起請求。如果查詢關(guān)鍵詞的長度大于1,則在搜索記錄數(shù)組中去重并顯示。處理用戶搜索的關(guān)鍵代碼流程如圖2所示。

      該文使用Django框架實現(xiàn)搜索引擎的用戶界面,首先在項目目錄下新建static文件夾,用于存放靜態(tài)文件,接著在urls.py文件中進行配置,使得訪問http://127.0.0.1:8000/時,顯示為自己定義的搜索引擎用戶界面。配置完成后,用戶搜索界面展示如圖3所示。

      搜索建議界面展示如圖4所示。

      搜索結(jié)果界面展示如圖5所示。

      查詢時,Elasticsearch會對每個符合查詢條件的文檔按照查詢關(guān)鍵詞與文檔的相關(guān)度進行評分,搜索結(jié)果默認按評分降序排序返回給用戶。Elasticsearch5.4之后對于text類型的字段,默認采用BM25評分模型。

      BM25模型是目前比較成功的概率檢索模型。BM25模型在二值獨立模型的基礎上做了改進,將文檔長度、文檔詞頻、idf因子等因素考慮進去,BM25模型的評分公式如下。

      對查詢Q進行分詞,并且依次計算文檔D中的每個單詞的分數(shù),累加后即為文檔D的分數(shù)。BM25模型的評分公式主要由3個部分組成:第一部分為從二值獨立模型中推導出來的相關(guān)性計算公式;第二部分為查詢關(guān)鍵詞在文檔D中的權(quán)值,其中fi代表詞項在文檔中的詞頻,k1、b是經(jīng)驗參數(shù),K是對文檔長度的考慮。當k1取0時,公式的第二部分為1,此時不考慮詞項在文檔中的詞頻;當b取0時,表示不考慮文檔長度的因素。第三部分是查詢關(guān)鍵詞自身的權(quán)值,tfta是詞項t在查詢Q中的詞頻,k2是一個取正的調(diào)優(yōu)參數(shù),用于對Q中的詞項頻率進行縮放,當取0時,表示不考慮詞項在Q中的權(quán)值。在沒有根據(jù)開發(fā)測試集進行優(yōu)化的前提下,實驗結(jié)果表明參數(shù)的合理取值應為:k1在區(qū)間(1.2,2)中,b取0.75,k2在區(qū)間(0,1000)中。

      3 ?實驗結(jié)果分析

      為了驗證該文所實現(xiàn)的校園網(wǎng)搜索引擎的可靠性,分別選取了百度站內(nèi)搜索、搜狗站內(nèi)搜索與該文設計的校園網(wǎng)搜索引擎進行對比測試,測試的對象為內(nèi)蒙古工業(yè)大學校園網(wǎng)站,測試的指標為,前20個搜索結(jié)果的相關(guān)度,測試的關(guān)鍵詞為“材料科學與工程學院舉辦“教授助你成才”系列講座第四期”。對比結(jié)果如表1所示。

      接下來測試各搜索引擎對于校園內(nèi)新發(fā)布信息的收錄情況,測試對象與上例相同,測試的指標為,所查詢信息是否被搜索引擎收錄,測試的關(guān)鍵詞為,內(nèi)蒙古工業(yè)大學在2019年1月10日發(fā)布的新聞信息“圖書館黨總支舉辦“中央紅軍長征與長征精神”主題黨課”。對比結(jié)果如表2所示。

      測試結(jié)果證明了對于給定的查詢關(guān)鍵詞,該文設計的校園網(wǎng)搜索引擎的搜索結(jié)果數(shù)量更多,相關(guān)性更好,并且可以有效地解決校園內(nèi)新信息收錄不及時的問題。

      4 ?結(jié)語

      基于Scrapy框架和Elasticsearch的校園網(wǎng)搜索引擎,成功解決了校園網(wǎng)內(nèi)信息不易被通用搜索引擎收錄與收錄不及時的問題,滿足了校園內(nèi)師生的信息檢索需求。該文的下一步工作是在搜素引擎的基礎上,使用Scrapy-Redis進行分布式爬取,提高數(shù)據(jù)爬取效率,并考慮使用布隆過濾器,降低內(nèi)存使用,進一步提升校園內(nèi)師生的搜索體驗。

      參考文獻

      [1] 左衛(wèi)剛.基于Python的校園網(wǎng)搜索引擎研究[J].電子技術(shù)與軟件工程,2018,144(22):40-42.

      [2] 云洋.基于Scrapy的網(wǎng)絡爬蟲設計與實現(xiàn)[J].電腦編程技巧與維護,2018(9):19-21,58.

      [3] 欽蔣承,沈宏良.基于Elasticsearch的校內(nèi)全文搜索平臺的研究與實現(xiàn)[J].現(xiàn)代計算機:專業(yè)版,2018,634(34):98-102.

      [4] Gormley C,Tong Z.Elasticsearchthedefinitiveguide:adistributedreal-timesearchandanalyticsengine[M].Sebastopol,CA:O'Reilly,2015.

      [5] 王偉,魏樂,劉文清,等.基于ElasticSearch的分布式全文搜索系統(tǒng)[J].電子科技,2018,31(347):60-63,69.

      [6] 焦萍萍.基于python技術(shù)面向校園網(wǎng)原型搜索引擎設計[J].電腦知識與技術(shù),2017(9):20-21,28.

      [7] 韓貝,馬明棟,王得玉,等.基于Scrapy框架的爬蟲和反爬蟲研究[J].計算機技術(shù)與發(fā)展,2019,29(2):145-148.

      猜你喜歡
      爬蟲分詞校園網(wǎng)
      基于Python的網(wǎng)絡爬蟲和反爬蟲技術(shù)研究
      分詞在英語教學中的妙用
      Python反爬蟲設計
      中職學校校園網(wǎng)教育功能應用現(xiàn)狀及對策的研究
      結(jié)巴分詞在詞云中的應用
      結(jié)巴分詞在詞云中的應用
      基于Scrapy框架的分布式網(wǎng)絡爬蟲的研究與實現(xiàn)
      誰搶走了低價機票
      高職院校校園網(wǎng)應用存在的問題與對策
      網(wǎng)絡安全技術(shù)在校園網(wǎng)中的應用
      耒阳市| 曲周县| 河东区| 盐池县| 井研县| 莆田市| 西昌市| 祁阳县| 德惠市| 浪卡子县| 广南县| 沭阳县| 德庆县| 水富县| 沙雅县| 尤溪县| 陆丰市| 沙湾县| 南开区| 江永县| 车致| 旬邑县| 库车县| 景洪市| 八宿县| 马龙县| 沙坪坝区| 从化市| 弥渡县| 安乡县| 溧水县| 柯坪县| 哈密市| 江北区| 金平| 红安县| 尉犁县| 丽水市| 尉氏县| 茌平县| 讷河市|