国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Scrapy分布式爬蟲搜索引擎

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

劉思林

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

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

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

1 引言

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

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

2 爬蟲基本原理

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

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

3 Scrapy-Redis分布式爬蟲

3.1 Scrapy

Scrapy的原理如圖1所示:

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

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

3.2 Redis

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

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

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

5 ElasticSearch搜索引擎

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

5.1 Elasticsearch-RTF

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

5.2 Elasticsearch-head

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

5.3 Kibana

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

6 結(jié)論

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

參考文獻:

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

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

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

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

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

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

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

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

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

猜你喜歡
爬蟲搜索引擎開源
利用網(wǎng)絡(luò)爬蟲技術(shù)驗證房地產(chǎn)灰犀牛之說
基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
五毛錢能買多少頭牛
利用爬蟲技術(shù)的Geo-Gnutel la VANET流量采集
電子測試(2018年1期)2018-04-18 11:53:04
大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲技術(shù)
電子制作(2017年9期)2017-04-17 03:00:46
大家說:開源、人工智能及創(chuàng)新
開源中國開源世界高峰論壇圓桌會議縱論開源與互聯(lián)網(wǎng)+創(chuàng)新2.0
開源計算機輔助翻譯工具研究
網(wǎng)絡(luò)搜索引擎亟待規(guī)范
基于Nutch的醫(yī)療搜索引擎的研究與開發(fā)
潼关县| 牙克石市| 大英县| 甘德县| 屏山县| 封丘县| 临猗县| 贡嘎县| 中阳县| 龙山县| 平定县| 潢川县| 革吉县| 肇源县| 绥江县| 政和县| 凯里市| 砚山县| 弥勒县| 吐鲁番市| 葫芦岛市| 横峰县| 阳谷县| 龙川县| 天台县| 长春市| 勐海县| 安顺市| 桑植县| 铜山县| 涿州市| 西昌市| 胶州市| 普定县| 太仆寺旗| 白水县| 甘南县| 仙桃市| 得荣县| 潮安县| 平远县|