• 
    

    
    

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

      基于Scrapy框架的校園搜索引擎設(shè)計

      2020-05-18 02:41:13馬威
      科技創(chuàng)新與應(yīng)用 2020年14期
      關(guān)鍵詞:搜索引擎

      馬威

      摘? 要:近年來隨著數(shù)字化校園建設(shè)進度的加快,高校校園網(wǎng)站中的信息不斷增加。校園網(wǎng)用戶量和問題數(shù)量的增加導(dǎo)致查找和索引信息變得困難,用戶搜索服務(wù)的準(zhǔn)確率得不到保障。文章基于Scrapy框架對校園搜索引擎進行設(shè)計,利用URL去重策略來提升校園信息的查詢效率,使搜索結(jié)果達到滿意期望值。

      關(guān)鍵詞:搜索引擎;Scrapy框架;URL去重

      中圖分類號:TP391.3 文獻標(biāo)志碼:A 文章編號:2095-2945(2020)14-0084-02

      Abstract: In recent years, with the acceleration of the construction of digital campuses, the information on the campus websites of universities has been increasing. The increase in the number of users and questions on the campus network makes it difficult to find and index information, and the accuracy of user search services cannot be guaranteed. This article designs the campus search engine based on the Scrapy framework. The search engine uses the URL deduplication strategy to improve the query efficiency of campus information, and makes the search results meet the satisfied expectations.

      Keywords: search engine; Scrapy framework; URL deduplication

      引言

      在現(xiàn)今信息化的社會中,人們可以通過網(wǎng)絡(luò)獲得大量的信息。對于校園數(shù)字化建設(shè)來說,大量的冗雜信息給校園網(wǎng)站內(nèi)信息的查找與定位帶來困難。目前大多校園網(wǎng)站都是采用普通的站內(nèi)搜索來查詢信息,難以滿足日益增長的需求。

      針對上述問題,為了給學(xué)校打造一個高效、清凈的信息環(huán)境,本文將基于Scrapy框架對校園搜索引擎進行相關(guān)設(shè)計。建立校園搜索引擎的可行性主要有以下幾個方面:(1)校園站的網(wǎng)絡(luò)鏈接相對較少,站點層次分明,數(shù)據(jù)抓取進程的計算量也較少,能加快服務(wù)器的響應(yīng)速度。(2)所需硬件和軟件配置不高,便于控制項目開發(fā)成本,有利于項目實施。(3)參考體系成熟的相關(guān)模型和算法,加以改進優(yōu)化后應(yīng)用到設(shè)計中。

      由上述分析可知,建立校園搜索引擎是符合客觀實際需求并且可行的。

      1 建立搜索引擎流程分析

      1.1 分析搜索引擎框架

      建立搜索引擎首要工作是分析設(shè)計流程,本文選用Python 語言中的Scrapy爬蟲框架作為數(shù)據(jù)抓取的核心,接著使用Whoosh建立搜索引擎的索引庫,最后使用Flask設(shè)計Web查詢界面。

      1.2 網(wǎng)絡(luò)爬蟲

      網(wǎng)絡(luò)爬蟲是一種自動抓取網(wǎng)頁信息的程序,搜索引擎通過爬蟲抓取網(wǎng)頁信息,網(wǎng)絡(luò)爬蟲是搜索引擎的核心。網(wǎng)絡(luò)爬蟲從初始網(wǎng)頁的URL開始,在抓取網(wǎng)頁信息的進程中,不停地將所在頁面抓取的子URL放入待抓取URL隊列,所有的抓取信息將會以文件的形式被存儲到數(shù)據(jù)庫。

      廣度優(yōu)先遍歷又叫層次遍歷,從網(wǎng)頁的初始URL開始抓取,將網(wǎng)頁的子URL提取到待抓取隊列,已抓取過的URL存儲在一個表里。每次處理新URL前先詢問是否已存在表中,若存在就說明該URL已抓取過,對此URL不再做處理,否則進行下一步處理。這種遍歷算法存儲了網(wǎng)頁中所有的URL,所占用存儲空間較大,程序運行速度較快。

      深度優(yōu)先遍歷是抓取網(wǎng)頁初始URL之前先搜索出一條單獨的鏈。深度優(yōu)先遍歷沿著網(wǎng)頁的子URL抓取到無URL可抓為止,接著返回至某一個網(wǎng)頁URL,再選擇該網(wǎng)頁中的其他URL抓取信息。深度優(yōu)先遍歷不保留網(wǎng)頁的所有URL,抓取后的URL會自動從數(shù)據(jù)庫中刪除,這種遍歷算法的空間復(fù)雜度較小,占用空間也相對較少,本次設(shè)計選用這種遍歷算法。

      非完全PageRank 策略是一種基于PageRank的抓取策略。該策略的工作原理是將已抓取的網(wǎng)頁和待抓取的網(wǎng)頁相加,在集合中進行PageRank計算,然后把待抓取URL 隊列中的網(wǎng)頁按照PageRank計算結(jié)果從高到低排序得到一組序列,該序列就是程序后續(xù)所要依次抓取的URL列表。

      1.3 搜索引擎的索引

      搜索引擎的索引是關(guān)鍵詞與網(wǎng)頁文件之間的一種對應(yīng)關(guān)系,其核心是進行布爾集合運算。目前存在兩種索引:正向索引和倒排索引。

      正向索引是文章生成的關(guān)鍵詞的集合,抓取信息時會記錄關(guān)鍵詞的所在位置以及出現(xiàn)頻率等信息。正向索引的結(jié)構(gòu)是每個文檔都對應(yīng)其出現(xiàn)的關(guān)鍵字列表(關(guān)鍵詞,出現(xiàn)位置,出現(xiàn)次數(shù)),正向索引需要遍歷掃描所有正向索引文件才知道哪些文檔帶有某個關(guān)鍵詞,搜索效率相對較低。

      反向索引與正向索引相反,其數(shù)據(jù)結(jié)構(gòu)是“單詞-文檔矩陣”,是關(guān)鍵詞對應(yīng)含有此關(guān)鍵詞的文檔集合。反向索引不但能記錄擁有相應(yīng)關(guān)鍵詞文件的序列,而且能記錄關(guān)鍵詞頻率以及相應(yīng)文檔頻率、關(guān)鍵詞出現(xiàn)位置等信息。在排序時這些信息都會被分別加權(quán)處理,產(chǎn)生最終的排序結(jié)果。

      Whoosh是Python語言中的開源索引庫,Whoosh提供許多函數(shù)和類應(yīng)用于建立文檔索引,通過查詢輸入關(guān)鍵詞對文檔進行搜索。

      使用whoosh建立索引具備以下優(yōu)點:(1)運行速度相比solr和elasticsearch較快,使用python語言解析,不用再使用其他編譯器。(2)使用BM25F作為排序算法,更方便自定義。(3)占用存儲空間較小。(4)支持存儲任意的python面向?qū)ο蟆?/p>

      whoosh索引的概念比solr和elasticsearch更簡單易懂,不需要深入研究分布式爬蟲,適用于搜索引擎的初學(xué)者。

      1.4 Web查詢界面

      查詢結(jié)果的排序規(guī)則與單文本詞匯頻率指數(shù)(TF)和逆文本詞匯頻率指數(shù)(IDF)相關(guān)。單文本詞匯頻率是根據(jù)網(wǎng)頁長度對網(wǎng)頁中關(guān)鍵詞的出現(xiàn)次數(shù)做歸一化處理,即關(guān)鍵詞的次數(shù)除以網(wǎng)頁的總詞數(shù)。利用IDF提供的關(guān)鍵詞再加權(quán)重,那么網(wǎng)頁以及查詢有關(guān)的計算就從以前對詞頻的計算變成加權(quán)的求和。

      TF-IDF=TF*IDF

      TF-IDF和關(guān)鍵詞在文檔中的出現(xiàn)次數(shù)成正比,與該詞在整個語言中的出現(xiàn)次數(shù)成反比。

      Web查詢界面設(shè)計使用Flask框架。查詢界面內(nèi)的索引模塊會根據(jù)查詢語句進行檢索排序,然后將查詢結(jié)果返回給界面展示,用戶就會得到查詢信息的相關(guān)內(nèi)容。

      2 在搜索引擎中應(yīng)用Scrapy爬蟲框架

      2.1 Scrapy框架工作原理

      Scrapy是一個基于Twisted的異步處理框架,是Python語言編寫的爬蟲框架,用戶能根據(jù)自身需求修改配置。Scrapy框架還能應(yīng)用于數(shù)據(jù)挖掘、數(shù)據(jù)分析、數(shù)據(jù)存儲、檢測網(wǎng)絡(luò)異常等應(yīng)用領(lǐng)域。

      Scrapy框架組件及其中間件的功能如下:(1)Scrapy引擎:串聯(lián)框架各個模塊,觸發(fā)事務(wù)處理流程,控制系統(tǒng)數(shù)據(jù)處理流程。(2)Scheduler(調(diào)度器):有效處理待抓取URL隊列。接受請求后把下一個待抓取URL返回給調(diào)度器。(3)Downloader(下載器):向網(wǎng)站服務(wù)器發(fā)送訪問頁面請求,再用爬蟲抓取網(wǎng)頁的內(nèi)容。(4)Spiders(爬蟲):選擇抓取的網(wǎng)站和數(shù)據(jù)內(nèi)容,創(chuàng)建網(wǎng)頁解析規(guī)則和域名過濾規(guī)則等。(5)Item Pipeline(項目管道):處理爬蟲抓取的數(shù)據(jù),包括數(shù)據(jù)清洗、URL去重和數(shù)據(jù)存儲等。(6)Middlewares(中間件):處理引擎與下載器之間的請求及響應(yīng),設(shè)置代理ip和用戶代理。

      Scrapy爬蟲框架能快捷抓取網(wǎng)站信息,架構(gòu)清晰,模塊之間的耦合程度低,可擴展性強,幫助用戶靈活地完成各種需求。

      2.2 Scrapy框架的網(wǎng)頁URL去重策略

      Scrapy框架中URL去重是由RFPDupeFilter類中的request_fingerprint的方法來實現(xiàn)的。

      調(diào)度器根據(jù)每一個URL請求的對應(yīng)信息加密得到一個指紋信息,然后將自身維護的待抓取URL指紋信息和加密指紋信息對比,若指紋信息已存在就說明重復(fù)請求,將該請求從隊列中刪除,若沒有該指紋信息,就把請求對象放入隊列中等待被調(diào)用。

      通常request請求時,在參數(shù)中加入dont_filter=False能關(guān)閉去重策略,可以反復(fù)抓取同一網(wǎng)站中不同子URL的網(wǎng)頁信息。在進行大量的網(wǎng)頁去重時,也可以使用Bloom Filter算法,就是利用布隆過濾器來節(jié)省占用的內(nèi)存,能夠大幅度降低內(nèi)存使用,只需要使用傳統(tǒng)方法的八分之一到四分之一。

      關(guān)于數(shù)據(jù)去重一般有兩種方法:一是使用Python的集合類型在pipeline中添加的去重策略,這種方法操作簡單,不容易引發(fā)錯誤;二是將數(shù)據(jù)存儲到數(shù)據(jù)庫時去重,比如在Mysql中設(shè)置唯一索引或者在Redis中使用集合等,這種方法對爬蟲的工作效率影響較小,但是會增加數(shù)據(jù)庫的工作負荷。

      2.3 Scrapy框架爬蟲防禁止策略

      在爬蟲程序運行的過程中,會頻繁訪問目標(biāo)網(wǎng)站,甚至?xí)斐赡繕?biāo)網(wǎng)站的服務(wù)器超負荷運行。這樣會導(dǎo)致程序的IP被網(wǎng)站禁止訪問,從而影響數(shù)據(jù)抓取的效率。以下是兩種防止爬蟲被禁止的策略: (1)在編寫爬蟲程序時,將settings.py文件中download_delay的參數(shù)設(shè)置為2秒以上,讓程序抓取數(shù)據(jù)的頻率不要太高。但這樣也會增加程序的運行時間。(2)動態(tài)設(shè)置User-Agent代理池。User-Agent是包含瀏覽器、操作系統(tǒng)等信息的一個字符串,代理池的作用是在http請求頭部加入user-agent選項,偽裝成瀏覽器向服務(wù)器端發(fā)包。

      3 結(jié)束語

      本文通過Scrapy爬蟲框架的使用,設(shè)計一個簡單的校園搜索引擎系統(tǒng)。利用Scrapy爬蟲框架以及Pythn語言擴展庫,來實現(xiàn)校園搜索引擎系統(tǒng)穩(wěn)定運行,在推廣校園搜索引擎的使用方面存在著積極意義。系統(tǒng)同時也存在一些有待改進提升的功能,例如添加抓取校園官方微博以及微信公眾號里的熱點新聞?wù)宫F(xiàn)在查詢界面,這樣用戶就可以及時獲取校園動態(tài),還有改進搜索算法、提高搜索結(jié)果智能化等都是需要進一步研究的內(nèi)容。

      參考文獻:

      [1]耿大偉.基于Python技術(shù)的校園網(wǎng)搜索引擎的設(shè)計與實現(xiàn)[D].燕山大學(xué),2015.

      [2]崔慶才.Python3網(wǎng)絡(luò)爬蟲開發(fā)實戰(zhàn)[M].北京:人民郵電出版社,2019.

      [3]董李鵬,高東懷,張迎,等.基于Lucene的校園網(wǎng)智能搜索引擎的設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),2013,36(6):83-86.

      [4]姜杉彪,黃凱林,盧昱江,等.基于Python的專業(yè)網(wǎng)絡(luò)爬蟲的設(shè)計與實現(xiàn)[J].企業(yè)科技與發(fā)展,2016(8):17-19.

      猜你喜歡
      搜索引擎
      Chrome 99 Canary恢復(fù)可移除預(yù)置搜索引擎選項
      網(wǎng)絡(luò)搜索引擎亟待規(guī)范
      Nutch搜索引擎在網(wǎng)絡(luò)輿情管控中的應(yīng)用
      基于Nutch的醫(yī)療搜索引擎的研究與開發(fā)
      廣告主與搜索引擎的雙向博弈分析
      基于Lucene搜索引擎的研究
      知識漫畫
      百科知識(2012年11期)2012-04-29 08:30:15
      一種自反饋式元搜索系統(tǒng)的設(shè)計
      搜索引擎,不止有百度與谷歌
      搜索,也要“深搜熟濾”
      阿拉善右旗| 牙克石市| 龙陵县| 张家界市| 永德县| 吉木乃县| 龙陵县| 高要市| 名山县| 桃源县| 巫山县| 灵宝市| 鹿邑县| 商河县| 双辽市| 丹阳市| 井陉县| 布尔津县| 定陶县| 双鸭山市| 石首市| 汤原县| 永和县| 鹤山市| 侯马市| 白水县| 龙川县| 台中县| 贺州市| 四平市| 武陟县| 黔西| 株洲县| 新宁县| 阿勒泰市| 平和县| 本溪| 鹤山市| 竹山县| 周口市| 温州市|