• 
    

    
    

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

      ?

      Scrapy分布式爬蟲搜索引擎

      2018-02-24 13:55劉思林
      電腦知識與技術 2018年34期
      關鍵詞:爬蟲搜索引擎開源

      劉思林

      摘要:隨著大數(shù)據(jù)時代的到來,信息的獲取與檢索尤為重要。如何在海量的數(shù)據(jù)中快速準確獲取到我們需要的內容顯得十分重要。通過對網(wǎng)絡爬蟲的研究和爬蟲框架Scrapy的深入探索,結合Redis這種NoSQL數(shù)據(jù)庫搭建分布式爬蟲框架,并結合Django框架搭建搜索引擎網(wǎng)站,將從知乎,拉鉤,伯樂等網(wǎng)站抓取的有效信息存入ElasticSearch搜索引擎中,供用戶搜索獲取。研究結果表明分布式網(wǎng)絡爬蟲比單機網(wǎng)絡爬蟲效率更高,內容也更豐富準確。

      關鍵詞:網(wǎng)絡爬蟲;Scrapy;分布式;Scrapy-Redis;Django;ElasticSearch

      中圖分類號:TP311? ? ?文獻標識碼:A? ? ?文章編號:1009-3044(2018)34-0186-03

      1 引言

      爬蟲的應用領域非常廣泛,目前利用爬蟲技術市面上已經(jīng)存在了比較成熟的搜索引擎產品,如百度,谷歌以及其他垂直領域搜索引擎,這些都是非直接目的的;還有一些推薦引擎,如今日頭條,可以定向給用戶推薦相關新聞;爬蟲還可以用來作為機器學習的數(shù)據(jù)樣本。

      論文研究的主要目的是更加透徹的理解爬蟲的相關知識;在熟練運用Python語言的基礎上,更加深入的掌握開源的爬蟲框架Scrapy,為后續(xù)其他與爬蟲相關的業(yè)務奠定理論基礎和數(shù)據(jù)基礎;進一步理解分布式的概念,為大數(shù)據(jù)的相關研究和硬件條件奠定基礎;熟練理解python搭建網(wǎng)站的框架Django,深入理解基于Lucene的搜索服務器ElasticSearch,最終在上述基本知識的基礎上,搭建出一個簡易版本的搜索引擎,實現(xiàn)從網(wǎng)絡上爬取數(shù)據(jù),存儲到分布式的Redis數(shù)據(jù)庫,并最終通過Django和ElasticSearch,實現(xiàn)搜索展現(xiàn)的目的。

      2 爬蟲基本原理

      網(wǎng)絡爬蟲是一種按照一定規(guī)則,自動抓取萬維網(wǎng)信息的程序或者腳本。如果把互聯(lián)網(wǎng)比作一張大的蜘蛛網(wǎng),數(shù)據(jù)便是存放于蜘蛛網(wǎng)的各個節(jié)點,而爬蟲就是一只小蜘蛛,沿著網(wǎng)絡抓取自己的獵物(數(shù)據(jù))。爬蟲指的是,向網(wǎng)站發(fā)起請求,獲取資源后分析并提取有用數(shù)據(jù)的程序。

      從技術層面來說就是通過程序模擬瀏覽器請求站點的行為,把站點返回的HTML代碼,JSON數(shù)據(jù),二進制數(shù)據(jù)(圖片、視頻)等爬到本地,進而提取自己需要的數(shù)據(jù),存放起來供后期使用。

      3 Scrapy-Redis分布式爬蟲

      3.1 Scrapy

      Scrapy的原理如圖1所示:

      各個組件的解釋如下:Scrapy Engine(引擎):負責Spider、ItemPipeline、Downloader、Scheduler中間的通訊,信號、數(shù)據(jù)傳遞等,相當于人的大腦中樞,機器的發(fā)動機等,具有顯著的作用。Scheduler(調度器):負責接收引擎發(fā)送過來的Request請求,并按照一定的方式邏輯進行整理排列,入隊,當引擎需要時,再交還給引擎。Downloader(下載器):負責下載Scrapy Engine(引擎)發(fā)送的所有Requests請求,并將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來處理。Spider(爬蟲):負責處理所有的Responses,從中分析提取數(shù)據(jù),獲取Item字段需要的數(shù)據(jù),并將需要跟進的URL提交給引擎,再次進入Scheduler(調度器)。Item Pipeline(管道):負責處理Spider中獲取到的Item,并進行后期處理(詳細分析、過濾、存儲等)。Downloader Middlewares(下載中間件):可以當作是一個可以自定義擴展下載功能的組件。Spider Middlewares(Spider中間件):可以理解為是一個可以自定義擴展和操作引擎以及Spider中間通信的功能組件(例如進入Spider的Responses;和從Spider出去的Requests)。

      整個Scrapy爬蟲框架執(zhí)行流程可以理解為:爬蟲啟動的時候就會從start_urls提取每一個url,然后封裝成請求,交給engine,engine交給調度器入隊列,調度器入隊列去重處理后再交給下載器去下載,下載返回的響應文件交給parse方法來處理,parse方法可以直接調用xpath方法提取數(shù)據(jù)了。

      3.2 Redis

      Redis 是完全開源免費的,遵守BSD協(xié)議的,高性能的key-value數(shù)據(jù)庫。Redis 與其他key - value 緩存產品有以下三個特點:(1)Redis支持數(shù)據(jù)的持久化,可以將內存中的數(shù)據(jù)保存在磁盤中,重啟的時候可以再次加載進行使用。這樣可以防止數(shù)據(jù)的丟失,在實際生產應用中數(shù)據(jù)的完整性是必須保證的。(2)Redis不僅僅支持簡單的key-value類型的數(shù)據(jù),同時還提供list,set,zset,hash等數(shù)據(jù)結構的存儲。這些功能更強大的數(shù)據(jù)存儲方式極大地節(jié)約了存儲空間,優(yōu)化了查詢的性能,大大提高了查詢效率。存儲的目的是為了后期更好的取出,Redis很好地做到了這一點。(3)Redis支持數(shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。主從結構目前是大數(shù)據(jù)里面的主流結構,主從模式能保證數(shù)據(jù)的健壯性和高可用。當出現(xiàn)電腦宕機,硬盤損壞等重大自然原因時,主從模式能很好的保證存儲的數(shù)據(jù)不丟失,隨時恢復到可用狀態(tài)。正是考慮到Redis的以上強大特點,才選擇Redis作為分布式存儲的數(shù)據(jù)庫。

      4 Django搭建搜索網(wǎng)站

      Django是一個開放源代碼的Web應用框架,由Python開發(fā)的基于MVC構造的框架。在Django中,控制器接受用戶輸入的部分由框架自行處理,因此更加關注模型,模板和視圖,即MVT。模型(Model),即數(shù)據(jù)存取層,處理與數(shù)據(jù)相關的所有事物:包括如何存取,如何驗證有效性,數(shù)據(jù)之間的關系等。視圖(View),即表現(xiàn)層,處理與表現(xiàn)相關的邏輯,主要是顯示的問題。模板(Template),即業(yè)務邏輯層,主要職責是存取模型以及調取恰當模板的相關邏輯。控制器部分,由Django框架的URLconf來實現(xiàn),而URLconf機制恰恰又是使用正則表達式匹配URL,然后調用合適的函數(shù)。因此只需要寫很少量的代碼,只需關注業(yè)務邏輯部分,大大提高了開發(fā)的效率。使用Django搭建搜索引擎的界面,簡單便捷且界面交互效果良好,適應需求,無須成本。

      5 ElasticSearch搜索引擎

      ElasticSearch是一個基于Lucene的實時的分布式搜索和分析引擎,設計用于云計算中,能夠達到實時搜索,穩(wěn)定,可靠,快速,安裝使用非常方便?;赗ESTful接口。ElasticSearch具有廣泛的用戶,如DELL,GitHub,Wikipedia等。ElasticSearch和關系型數(shù)據(jù)庫之間的對比如表1所示:

      5.1 Elasticsearch-RTF

      RTF是Ready To Fly的縮寫,在航模里面,表示無需組裝零件即可直接上手即飛的航空模型。Elasticsearch-RTF是針對中文的一個發(fā)行版,即使用最新穩(wěn)定的Elasticsearch版本,并且下載測試好對應的插件,如中文分詞插件等,目的是可以下載下來就可以直接的使用。項目構建過程中選擇的是Elasticsearch-RTF 5.1.1版本。安裝后啟動,效果如圖2所示:

      5.2 Elasticsearch-head

      ElasticSearch-head是一個Web前端插件,用于瀏覽ElasticSearch集群并與之進行交互,它可以作為ElasticSearch插件運行,一般首選這種方式,當然它也可以作為獨立的Web應用程序運行。它的通用工具有三大操作:ClusterOverview,顯示當前集群的拓撲,并允許執(zhí)行索引和節(jié)點級別的操作;有幾個搜索接口可以查詢原生Json或表格格式的檢索結果;顯示集群狀態(tài)的幾個快速訪問選項卡;一個允許任意調用RESTful API的輸入部分。

      5.3 Kibana

      Kibana是一個開源的分析與可視化平臺,設計出來用于和Elasticsearch一起使用的??梢杂胟ibana搜索、查看、交互存放在Elasticsearch索引里的數(shù)據(jù),使用各種不同的圖表、表格、地圖等。kibana能夠很輕易地展示高級數(shù)據(jù)分析與可視化。Kibana使理解大量數(shù)據(jù)變得容易。它簡單、基于瀏覽器的接口能快速創(chuàng)建和分享實時展現(xiàn)Elasticsearch查詢變化的動態(tài)儀表盤。Kibana啟動完成后,可看到插入數(shù)據(jù)和頁面查詢顯示結果如圖3所示:

      6 結論

      通過對爬蟲理論的相關理解,將互聯(lián)網(wǎng)上海量的信息按需要加以分類和存儲,并最終展示給特定用戶的特定領域需求的信息,避免網(wǎng)上海量信息的視覺沖擊,從而達到準確,高效檢索的目的。利用Python語言以及其豐富的知識庫,結合開源的Scrapy爬蟲框架,能夠高效的將網(wǎng)上海量的信息爬取下來,并利用Redis分布式數(shù)據(jù)庫的特點,將數(shù)據(jù)安全,快速的存入,方便后期的獲取與檢索,使用開源的Django框架搭建搜索引擎網(wǎng)站,提供靈活便捷的可視化操作界面,方便廣大用戶的使用,結合ElasticSearch強大的搜索功能,將所有組件結合到一起,完成搜索引擎的全部功能,最終達到搜索的目的。

      參考文獻:

      [1] 郭一峰.分布式在線圖書爬蟲系統(tǒng)的設計與實現(xiàn)[D].北京交通大學,2016.

      [2] 王敏.分布式網(wǎng)絡爬蟲的研究與實現(xiàn)[D].東南大學,2017.

      [3] 胡慶寶,姜曉巍,石京燕,程耀東,梁翠萍.基于Elasticsearch的實時集群日志采集和分析系統(tǒng)實現(xiàn)[J].科研信息化技術與應用,2016,7.

      [4] 曾亞飛.基于Elasticsearch的分布式智能搜索引擎的研究與實現(xiàn)[D].重慶大學,2016.

      [5] 姚經(jīng)緯,楊福軍.Redis分布式緩存技術在Hadoop平臺上的應用[J].計算機技術與發(fā)展,2017,27(6):146-150+155.

      [6] 馬聯(lián)帥.基于Scrapy的分布式網(wǎng)絡新聞抓取系統(tǒng)設計與實現(xiàn)[D].西安電子科技大學,2015.

      [7] 吳霖.分布式微信公眾平臺爬蟲系統(tǒng)的研究與應用[D].南華大學,2015.

      [8] 李春生.基于WEB信息采集的分布式網(wǎng)絡爬蟲搜索引擎的研究[D].吉林大學,2009.

      【通聯(lián)編輯:梁書】

      猜你喜歡
      爬蟲搜索引擎開源
      利用網(wǎng)絡爬蟲技術驗證房地產灰犀牛之說
      基于Python的網(wǎng)絡爬蟲和反爬蟲技術研究
      五毛錢能買多少頭牛
      利用爬蟲技術的Geo-Gnutel la VANET流量采集
      大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡爬蟲技術
      大家說:開源、人工智能及創(chuàng)新
      開源中國開源世界高峰論壇圓桌會議縱論開源與互聯(lián)網(wǎng)+創(chuàng)新2.0
      開源計算機輔助翻譯工具研究
      網(wǎng)絡搜索引擎亟待規(guī)范
      Nutch搜索引擎在網(wǎng)絡輿情管控中的應用
      404 Not Found

      404 Not Found


      nginx
      北海市| 普陀区| 乌拉特前旗| 咸丰县| 微博| 闽侯县| 许昌市| 嘉荫县| 昆明市| 湘潭县| 靖宇县| 株洲市| 南通市| 贵阳市| 上林县| 普兰县| 大方县| 固原市| 正镶白旗| 武冈市| 邮箱| 定南县| 兴宁市| 三江| 黄骅市| 和林格尔县| 滁州市| 牡丹江市| 南安市| 梁山县| 分宜县| 淮安市| 伊金霍洛旗| 布拖县| 阳泉市| 江城| 尼木县| 宜春市| 濮阳市| 广南县| 密云县|