Nutch抓取原始碼分析之Crawl類

2021-06-03 11:07:24 字數 2789 閱讀 6987

1、初始化乙個configuration例項設定抓取工作配置;

2、設定一些預設抓取工作引數,比如程序數threads、抓取深度depth、抓取網頁數量topn;

3、建立抓取工作抓取到的網頁檔案的存放目錄(crawldb、linkdb、segments、indexes、index),用來存放原生網頁,以及網頁解析出的文字內容及其其它相關資料;

4、在抓取工作及其索引過程中,這通過初始化一些實現了這些操作的類的例項來完成的,例如:injectorgeneratorfetcherparsesegment、crawldb、linkdb、indexer、deleteduplicates、indexmerger。

5、最後,就開始執行相關操作了,包括初始化crawldb、生成抓取工作列表、抓取網頁檔案、更新crawldb、倒排links、建立索引、複製索引檔案、合併索引檔案。

//初始化配置檔案

configuration conf = nutchconfiguration.createcrawlconfiguration();

jobconf job = new nutchjob(conf);

// urls存放目錄

path rooturldir = null;

path dir = new path("crawl-" + getdate());

//抓取執行緒數目

int threads = job.getint("fetcher.threads.fetch", 10);

//抓取工作遍歷深度

int depth = 5;

long topn = long.max_value;

string indexername = "lucene";

string solrurl = null;

for (int i = 0; i < args.length; i++) else if ("-threads".equals(args[i])) else if ("-depth".equals(args[i])) else if ("-topn".equals(args[i])) else if ("-solr".equals(args[i])) else if (args[i] != null)

}filesystem fs = filesystem.get(job);

//抓取工作的不同操作需要的五個目錄

path crawldb = new path(dir + "/crawldb");

path linkdb = new path(dir + "/linkdb");

path segments = new path(dir + "/segments");

path indexes = new path(dir + "/indexes");

path index = new path(dir + "/index");

path tmpdir = job.getlocalpath("crawl"+path.separator+getdate());

injector injector = new injector(conf);

generator generator = new generator(conf);

fetcher fetcher = new fetcher(conf);

parsesegment parsesegment = new parsesegment(conf);

crawldb crawldbtool = new crawldb(conf);

linkdb linkdbtool = new linkdb(conf);

// 初始化crawldb

injector.inject(crawldb, rooturldir);

int i;

for (i = 0; i < depth; i++)

//抓取網頁內容

fetcher.fetch(segs[0], threads, org.apache.nutch.fetcher.fetcher.isparsing(conf)); // fetch it

if (!fetcher.isparsing(job))

//更新crawldb

crawldbtool.update(crawldb, segs, true, true); // update crawldb

} if (i > 0)

else

// delete old index

if (fs.exists(index))

}//索引過程

indexer indexer = new indexer(conf);

indexer.index(indexes, crawldb, linkdb,

arrays.aslist(hadoopfsutil.getpaths(fstats)));

indexmerger merger = new indexmerger(conf);

if(indexes != null) );

fstats = fs.liststatus(indexes, hadoopfsutil.getpassdirectoriesfilter(fs));

//將索引目錄index 中的索引檔案合併後寫入到indexes 目錄中

merger.merge(hadoopfsutil.getpaths(fstats), index, tmpdir);

}}

}

Nutch 原始碼分析 1

org.apache.nutch.crawl.crawl類的主函式如下所示 應該知道,nutch查詢檔案系統是基於linux系統的機制的,所以提供啟動的命令與linux的shell命令很相似。public static void main string args throws exception c...

原始碼分析之LayoutInflater

簡介 inflate填充的過程 viewstub,merge,include的載入過程 layoutinflater系統服務的註冊過程 systemserviceregistry類有個靜態 塊,完成了常用服務的註冊,如下 static 註冊am registerservice context.act...

原始碼分析之HashMap

首先hashmap繼承了abstractmap,並且實現了map cloneable和serializable三個介面。cloneable和serializable是比較常規的兩個介面,在這裡並不作為重點。重點將會放在abstractmap和map兩個規範上。其中abstractmap是乙個抽象類,...