1. 程式人生 > >用Nutch2.3+MongoDB+Elasticsearch1.4開發垂直搜尋引擎

用Nutch2.3+MongoDB+Elasticsearch1.4開發垂直搜尋引擎

Nutch下載

Elasticsearch1.4下載

修改ivy源

由於預設的ivy源速度比較慢,所以在這裡換成國內的源
在ivy/ivysetting.xml檔案中找到下面這段配置

<property name="repo.maven.org"  
      value="http://repo1.maven.org/maven2/"  
      override="false"/> 

把value替換成阿里雲的地址:

http://maven.aliyun.com/nexus/content/groups/public/

建立eclipse專案

把nutch解壓後的檔案壓移至eclipse工作空間中;
在eclipse中,在選單中選擇File->New->Project
然後選擇工程型別”Java Project from Existing Ant Buildfile”,再選擇nutch資料夾下的build.xml檔案即可;

修改配置檔案

  1. 修改conf/nutch-site.xml

    <!-- Put site-specific property overrides in this file. -->
    <configuration>
    
    <!--此引數主要用於在IDE環境開發模式執行,在構建輸出的runtime部署執行請註釋或刪除此項引數-->
        <!-- Just for development, please remove this plugin.folders for production env -->
        <property>
            <name
    >
    plugin.folders</name> <value><value>/Users/luojian/Documents/javaworkspace/nutch/build/plugins</value></value> </property> <!--基於gora的爬蟲資料底層儲存機制,--> <!--官方文件及推薦為HBase,本專案預設配置為MongoDB。需要同步配置gora.properties檔案中相關引數。--> <property> <name
    >
    storage.data.store.class</name> <value>org.apache.gora.mongodb.store.MongoStore</value> <description>Default class for storing data</description> </property> <property> <name>http.agent.name</name> <value>Your Nutch Spider</value> </property> </configuration>
  2. 修改ivy/ivy.xml

    <!-- 取消以下關於MongoDB的註釋,使其生效-->
    <dependency org="org.apache.gora" name="gora-mongodb" rev="0.6.1" conf="*->default" />
    
  3. 修改conf/gora.properties

    #######################
    \# MongoDBStore properties #
    \#######################
    gora.datastore.default=org.apache.gora.mongodb.store.MongoStore
    gora.mongodb.override_hadoop_configuration=false
    gora.mongodb.mapping.file=/gora-mongodb-mapping.xml
    gora.mongodb.servers=localhost:27017
    gora.mongodb.db=nutchFocuse
    \#gora.mongodb.login=login
    \#gora.mongodb.secret=secret
  4. Ant 編譯
    右鍵build.xml-> Ant build…
    在Targets標籤頁下,選中 eclipse
  5. 修改config build path 順序,將conf置頂
    這裡寫圖片描述

    這裡寫圖片描述

新增爬取網址

在專案目錄下新建 urls 資料夾,
並在此資料夾下新建seed.txt檔案
seed.txt檔案的內容如下:

#zhihu
https://www.zhihu.com/explore

啟動爬蟲

配置啟動引數
這裡寫圖片描述

這裡寫圖片描述

點選Run執行
看到如下結果,則代表正常
這裡寫圖片描述

增加操作java類

完成以上步驟,nutch已經能在eclipse中跑起來了
用nutch編譯生成的 crawl指令碼,在eclipse中會有比較多問題,比如找不到類,classpath不正確等
為了更方便操作,增加一個java類來代替crawl指令碼

package org.apache.nutch.crawl;

import org.apache.nutch.fetcher.FetcherJob;
import org.apache.nutch.indexer.IndexingJob;
import org.apache.nutch.parse.ParserJob;

public class Crawler {
    /**
     * @param args
     */
    public static void main(String[] args) {
        GeneratorJob gen = new GeneratorJob();
        String a = null;
        try {
            String[] arg1 = { "/Users/luojian/Documents/javaworkspace/nutch/urls", "-crawlId", "test" };
            InjectorJob.inject(arg1);
            for (int count=0;count<2;count++){
            String[] arg2 = { "-crawlId", "test" };
            a = gen.gen(arg2);
            System.out.println("輸出的是" + a);
            String[] arg3= {a,"-crawlId","test"};
            FetcherJob.fetch(arg3);
            ParserJob.parse(arg3);
            DbUpdaterJob.dbupdate(arg3);
            String[] arg4={"-all","-crawlId","test"};
            IndexingJob.index(arg4);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

其中 gen.gen(arg2) FetcherJob.fetch(arg3) ParserJob.parse(arg3) DbUpdaterJob.dbupdate(arg3) IndexingJob.index(arg4) 都是在原有的main方法上修改的,複製main方法,並修改方法名稱,把裡面的System.exit(res)這一行程式碼註釋掉,如IndexingJob類的程式碼修改如下

public static void main(String[] args) throws Exception {
    final int res = ToolRunner.run(NutchConfiguration.create(),
        new IndexingJob(), args);
    System.exit(res);
  }
  //複製main方法,然後註釋掉System.exit
  public static void index(String[] args) throws Exception {
        final int res = ToolRunner.run(NutchConfiguration.create(),
            new IndexingJob(), args);
//      System.exit(res);
      }

參考連結: