1. 程式人生 > >使用Elasticsearch構建爬蟲系統

使用Elasticsearch構建爬蟲系統

(一)為什麼用檢索?

爬蟲系統一般分為多執行緒下載部分,連結池,資料儲存,檢索系統等。這個檢索系統可以將我們爬取的資訊進行整合,並且可以加快我們查詢的速度。另外,不僅爬蟲系統使用,我覺得在一切想把結果做成索引對外提供查詢的需求都可以使用檢索系統,比如個人社工庫,大規模漏洞掃描系統(可以利用其做僵屍網路)等。檢索系統很多,但是我認為Elasticsearch比較方便,提供多種語言的API,比如java,php,perl,python等。今天就記錄下我折騰這個系統的過程。

(二)怎麼使用?

從網上下載客戶端與伺服器各一個,伺服器好說,下載下來就直接可以用:


進入bin目錄執行bat檔案即可,預設埠是9200。

客戶端(我使用的是PHP API)比較麻煩些, 要使用elasticsearch-php有如下三個要求:

1.PHP的版本在5.3.9以上,我用的是PHP5.3.23

2.在專案中使用Composor來管理包,下載地址如下:https://getcomposer.org/

3.在php.ini中開啟curl和openssl

安裝好composer之後,使用的過程如下:

(1)  新建一個目錄,我這裡的專案名為:phpcrawler。

(2)  在裡面新增下的json檔案:

	{  
	    "require":{  
	        "elasticsearch/elasticsearch" : "~1.2"  
	    }  
	} 

然後cd到這個資料夾,執行composer install --no-dev

稍等片刻就可以看到資料夾下出現了vendor資料夾,使用的也就是這個檔案,哪裡需要就貼上到哪裡即可。


這樣我們就可以直接在php中包含/vendor/autoload.php。

可能我的解釋不是很詳細,你也可以參考如下博文:

(三)構建爬蟲系統

有了PhpCrawler,PHP構建一個爬蟲系統變得就容易多了,只需要給一個入口連結,PhpCrawler就可以幫你自己爬取,當然,必要的正則還是要自己寫,不過省去了翻頁、連結池管理、連結排程等麻煩。對於如何使用PhpCrawler,不是本文討論的重點,你可以參考:

我所抓取的資料是歌單資料,一張歌單對應多個歌曲,歌單資訊包括建立時間,建立人,歌單名稱等,並存儲在Mysql上,有兩張表,一張是song,一張是songlist,通過songlist_id作為外來鍵關聯。

但是這些資料是比較亂的,用sql查詢起來不方便,並且查詢的速度也很慢,使用Elasticsearch構建索引會改變這一現狀。

(四)建立索引系統

在PHP中使用Elasticsearch類,返回的是一個客戶端,可以直接向建構函式傳遞一個array指明一個或者多個伺服器IP和埠。

建立過程如下:

(1)  建立一個客戶端


(2)  設定索引的名稱


(3)  設定索引的Mapping

   設定索引的mapping,名為:songlist_type。


(4)  設定索引項

使用$client物件的index新增索引項,要設定一個$params引數,body就是設定索引項的地方,這裡是把歌單的title和歌單的songlist_id做了一個索引。向伺服器提交一個關鍵字title就可以得到相應的id,使用這個id就可以獲取歌單中的歌曲。


新增完所有的索引項,索引就算做完了,記得執行一下,向伺服器提交索引

(五)使用索引查詢資料

建完了索引,自然是要利用到我們的需求中。在查詢時同樣也要建立一個客戶端,使用客戶端中的search方法,並設定引數就可以獲取結果集。這裡的提供的索引的鍵值為title(songlist_id和title構成的索引項)。Title的值設定為$query(GET中獲取)。

具體過程如下:


拿到結果集(Array),就可以從hits項中拿到查詢的結果。

提交$query=‘煩惱’,列印下search返回的結果陣列:

Array ( 
[took] => 2 
[timed_out] =>
[_shards] => Array ( 
[total] => 5
[successful] => 5 
[failed] => 0 ) 
[hits] => Array (   //查詢到的索引項的具體資訊,如果沒有匹配的項hits為空
[total] => 1   //匹配索引項的個數
[max_score] => 2.2478988 
[hits] => Array (    
[0] => Array ( 
[_index] => songlist_index  //索引的名稱
[_type] => songlist_type   //索引的mapping
[_id] => 209  //對應的id號
[_score] => 2.2478988 
[_source] => Array ( 
[title] => 你在煩惱什麼?  //結果的title
[songlist_id] => 209  //索引項的id 
) ) ) ) )

拿到之後遍歷之列印到頁面上即可~!


(六)使用效果

盜了百度的logo,但是重點是檢索的效果如下:


(七)總結

 簡簡單單用Elasticsearch構建索引,如果以後有相應的需求,記得使用這個檢索系統。


相關推薦

使用Elasticsearch構建爬蟲系統

(一)為什麼用檢索? 爬蟲系統一般分為多執行緒下載部分,連結池,資料儲存,檢索系統等。這個檢索系統可以將我們爬取的資訊進行整合,並且可以加快我們查詢的速度。另外,不僅爬蟲系統使用,我覺得在一切想把結果做成索引對外提供查詢的需求都可以使用檢索系統,比如個人社工庫,大規模漏洞掃

Python下用Scrapy和MongoDB構建爬蟲系統(1)

這篇文章將根據真實的兼職需求編寫一個爬蟲,使用者想要一個Python程式從Stack Overflow抓取資料,獲取新的問題(問題標題和URL)。抓取的資料應當存入MongoDB。值得注意的是,Stack Overflow已經提供了可用於讀取同樣資料的API。但是使用者想要一個

構建爬蟲系統

構建爬蟲系統(一) 一、實現目的 前面提到,我們的目標是構建一個基於技術部落格的垂直搜尋引擎,正所謂路要一步一步走,專案也要一節一節來,本節的目的很簡單,就是帶你構建搜尋引擎的基石——可靠的爬蟲系統。 爬蟲是文件的重要來源,所以這一節也比較重要,我會從爬蟲的基礎講起,爬蟲的構成,如何編寫爬蟲等等,希望大家能跟

Elasticsearch構建全文搜尋系統

[toc] # 前言 Elasticsearch 是一個分散式、可擴充套件、實時的搜尋與資料分析引擎,通過它我們可以構建出一個強大的全文搜尋系統,解決諸如文章檢索慢,商品檢索慢、MySQL的like查詢慢這樣的問題。 Elasticsearch是基於hadoop創始人道哥的另一傑作Lucene實現的,速度非

學習用Node.js和Elasticsearch構建搜索引擎(6):實際項目中常用命令使用記錄

nds 黃色 ati cat htm action last shard open 1、檢測集群是否健康。 curl -XGET ‘localhost:9200/_cat/health?v‘#後面加一個v表示讓輸出內容表格顯示表頭 綠色表示一切正常,黃色表示所有

springmvc mybatis shiro構建cms系統

java springmvc dubbo mybatis springcloud 開發語言: java、ios、android 部署平臺: linux、window jdk版本:JDK1.7以上版本 開發工具: eclipse、idea等 服務器中間件:Tomcat 6、7、Jboss 7

慕課網 微信服務號+Yii 2.0構建商城系統全棧應用 百度雲網盤分享

div .com alt 商城系統 分享 棧應用 微信 info yii 慕課網 微信服務號+Yii 2.0構建商城系統全棧應用 百度雲網盤分享 慕課網 微信服務號+Yii 2.0構建商城系統全棧應用 百度雲網盤分享

分布式爬蟲系統設計、實現與實戰:爬取京東、蘇寧易購全網手機商品數據+MySQL、HBase存儲

大數據 分布式 爬蟲 Java Redis [TOC] 1 概述 在不用爬蟲框架的情況,經過多方學習,嘗試實現了一個分布式爬蟲系統,並且可以將數據保存到不同地方,類似MySQL、HBase等。 基於面向接口的編碼思想來開發,因此這個系統具有一定的擴展性,有興趣的朋友直接看一下代碼,就能理

四周實現爬蟲系統 超經典的Python零基礎實戰化教學 Python零基礎實戰課程

工作 ext 篩選 搭建簡單 不讓 har pdf 精確 根目錄 ===============課程目錄=============== │ ├課程簡介.txt│ ├課時3 魔力手冊for實戰學員預習.pdf│ ├學習前必讀.txt│ ├<課程資料>│

爬蟲系統

sele red 第三篇 性能 cnblogs targe .com 基本 soup 第一篇:爬蟲基本原理 第二篇:請求庫之requests,selenium 第三篇:解析庫之re、beautifulsoup、pyquery 第四篇:存儲庫之mongodb,redis

第9課、解析網頁中的元素-四周學會爬蟲系統

ini bsp tip 好的 python3 pycharm har tle erp 目標:爬取本地網頁中,評分大於3的文章,並打印出來 準備: 安裝Python3.0。 安裝PyCharm,用於開發Python的集成環境。 安裝BeautifulSoup庫,學習爬蟲

python爬蟲系統(4.4-資料儲存到mongodb資料庫中)

一、如果你對mongodb不太熟悉的可以參考 二、將爬取的資料直接存入到mongodb資料庫中   1、在python中使用pymongo連線mongodb pip3 install pymongo 三、依然將之前爬取農產品產品資訊的資料存入mongodb中

從零開始構建嵌入式系統實踐指南

近期花費了一段時間從零搭建一個嵌入式系統,從Uboot,Kernel,檔案系統的編譯到配置一步一步的實踐,採坑到現在的順理成章,經歷了一個痛苦的過程,因此把搭建過程中的經驗整理成了一篇詳細的教程,發表在GitChat平臺上,分享給大家,共同探討,共同進步。 一個精簡完整的嵌入式系統包

SSM框架構建積分系統和基本商品檢索系統(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)

  專案原始碼https://github.com/FuZhucheng/SSM.git 使用前必讀 一、請使用IDEA工具匯入,open。 二、匯入資料庫檔案。 (第一篇部落格是ssm+redis.sql--未完善版本, 第二篇部落格是完善資料庫版本ssm+redis+l

elasticsearch 構建企業級搜尋探討

編輯|Natalie 說到搜尋,大家第一印象一般都是像百度、Google 這樣的網際網路搜尋引擎,這些搜尋引擎主要通過網路爬蟲抓取網際網路上的資料,比如網頁、圖片、文件、音視訊等,任何人都可以在上面輸入關鍵詞查詢自己想要的資訊。然而明略資料搜尋技術專家陳智發將在今天的分享中告訴我們:搜尋

ElasticSearch在debian系統下安裝遇到的問題

1、max virtual memory areas vm.max_map_count [65536] likely too low, increase to at least [262144] 核心引數(max_map_count)不夠大 解決辦法: cat /proc/sys

基於神經網絡的embeddding來構建推薦系統

驗證 撰寫 ive single pap dex lai 最終 you   在之前的博客中,我主要介紹了embedding用於處理類別特征的應用,其實,在學術界和工業界上,embedding的應用還有很多,比如在推薦系統中的應用。本篇博客就介紹了如何利用embedding來

or1200構建sopc系統之軟體環境搭建

使用預先編譯好的工具鏈 下載: ftp://ocuser:[email protected]/toolchain/or32-elf-linux-x86.tar.bz2 解壓 tar xjf or32-elf-linux-x86.tar.bz2 解壓會

Yocto構建檔案系統

Yocto構建檔案系統 一、準備工作 準備作業系統  建議使用Ubuntu14的虛擬機器或PC 由於後面的編譯過程將佔用大量資源,虛擬機器建議16g記憶體(至少8g)、4執行緒 ### 安裝軟體 ~~~java $ sudo apt-get install bu

基於深度神經網路的embeddding來構建推薦系統

在之前的部落格中,我主要介紹了embedding用於處理類別特徵的應用,其實,在學術界和工業界上,embedding的應用還有很多,比如在推薦系統中的應用。本篇部落格就介紹瞭如何利用embedding來構建一個圖書的推薦系統。 本文主要譯自《Building a Recommendation S