2021SC@SDUSC

顾名思义,org.apache.nutch.crawl.Crawl实现的是一个完整的抓取过程,包括各种方法的初始化,url集的建立

/* Perform complete crawling and indexing (to Solr) given a set of root urls and the -solrparameter respectively. More information and Usage parameters can be found below. */public static void main(String args[]) throws Exception {Configuration conf = NutchConfiguration.create();int res = ToolRunner.run(conf, new Crawl(), args);System.exit(res);

org.apache.nutch.util.NutchConfigurationite.xml.

private static Configuration addNutchResources(Configuration conf) {conf.addResource("nutch-default.xml");conf.addResource("nutch-site.xml");return conf;}

初始化时,加载nutch-default.xml,nutch-s

@Overridepublic int run(String[] args) throws Exception {if (args.length < 1) {System.out.println("Usage: Crawl <urlDir> -solr <solrURL> [-dir d] [-threads n] [-depth i] [-topN N]");return -1;}Path rootUrlDir = null;Path dir = new Path("crawl-" + getDate());int threads = getConf().getInt("fetcher.threads.fetch", 10);int depth = 5;long topN = Long.MAX_VALUE;String solrUrl = null;//获得输入参数for (int i = 0; i < args.length; i++) {if ("-dir".equals(args[i])) {dir = new Path(args[i+1]);i++;} else if ("-threads".equals(args[i])) {threads = Integer.parseInt(args[i+1]);i++;} else if ("-depth".equals(args[i])) {depth = Integer.parseInt(args[i+1]);i++;} else if ("-topN".equals(args[i])) {topN = Integer.parseInt(args[i+1]);i++;} else if ("-solr".equals(args[i])) {solrUrl = args[i + 1];i++;} else if (args[i] != null) {rootUrlDir = new Path(args[i]);}}JobConf job = new NutchJob(getConf());if (solrUrl == null) {LOG.warn("solrUrl is not set, indexing will be skipped...");}FileSystem fs = FileSystem.get(job);if (LOG.isInfoEnabled()) {LOG.info("crawl started in: " + dir);LOG.info("rootUrlDir = " + rootUrlDir);LOG.info("threads = " + threads);LOG.info("depth = " + depth);      LOG.info("solrUrl=" + solrUrl);if (topN != Long.MAX_VALUE)LOG.info("topN = " + topN);}//建立爬取过程中存放信息的文件夹,对应着各个阶段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(getConf());Generator generator = new Generator(getConf());Fetcher fetcher = new Fetcher(getConf());ParseSegment parseSegment = new ParseSegment(getConf());CrawlDb crawlDbTool = new CrawlDb(getConf());LinkDb linkDbTool = new LinkDb(getConf());// initialize crawlDb 初始化crawlDbinjector.inject(crawlDb, rootUrlDir);int i;for (i = 0; i < depth; i++) {             // generate new segment 生成新的抓取队列Path[] segs = generator.generate(crawlDb, segments, -1, topN, System.currentTimeMillis()); if (segs == null) {LOG.info("Stopping at depth=" + i + " - no more URLs to fetch.");break;}fetcher.fetch(segs[0], threads);  // fetch it 抓取if (!Fetcher.isParsing(job)) {parseSegment.parse(segs[0]);    // parse it, if needed 解析}crawlDbTool.update(crawlDb, segs, true, true); // update crawldb 更新crawlDb数据库}if (i > 0) {linkDbTool.invert(linkDb, segments, true, true, false); // invert links 计算反向链接if (solrUrl != null) {// index, dedup & merge  使用solr建立索引FileStatus[] fstats = fs.listStatus(segments, HadoopFSUtil.getPassDirectoriesFilter(fs));SolrIndexer indexer = new SolrIndexer(getConf());indexer.indexSolr(solrUrl, crawlDb, linkDb, Arrays.asList(HadoopFSUtil.getPaths(fstats)));SolrDeleteDuplicates dedup = new SolrDeleteDuplicates();dedup.setConf(getConf());dedup.dedup(solrUrl);}} else {LOG.warn("No URLs to fetch - check your seed list and URL filters.");}if (LOG.isInfoEnabled()) { LOG.info("crawl finished: " + dir); }return 0;}

这段主要是初始化参数,建立存URl的集,建索引

nutch代码分析第二篇——crawl.crawl相关推荐

  1. SAP PP COR2下达工单系统报错说-系统状态APNG是激活的- 分析第二篇

    SAP PP COR2下达工单系统报错说-系统状态APNG是激活的- 分析第二篇 笔者所在的项目上启用了ECM(Engineer Change Management)功能,重要数据的修改都要事先创建一 ...

  2. 今天开始做战斗,回合制战斗代码实现第二篇,九宫格战斗

    说到九宫格战斗,就不能不提一款游戏<神仙道>,在神仙道之前,九宫格战斗的模式就在几款游戏里面有应用,但神仙道是真真正正把这种战斗模式发扬光大的里程碑,当时无论口碑,还是市场占有率都可以说是 ...

  3. matlab实现鬼波信号压制算法  代码实践--第二篇 频率-波数域鬼波压制

    第二篇  matlab实现频率-波数域鬼波压制方法 本篇用来介绍频率-波数域鬼波压制的实现思路和压制效果 算法实现思路见2.3节,除了文中代码外,需配置鬼波压制算法工具包(https://downlo ...

  4. 150行java代码分析100篇英语六级阅读理解单词频率

    .txt保存阅读理解,java流读取各个单词,并将其数量存入数据库,然后查询数据库将结果写入.txt文件 package New;import java.io.BufferedReader; impo ...

  5. Realtek 8125驱动分析第二篇——触发硬件中断

    书接上文,本文讲述瑞昱2.5G网卡rtl8125的触发硬件中断相关内容. 目录 1 中断处理函数(ISR)注册 2 触发硬件中断 可以通过下面的命令来看interrupts. howard@B150: ...

  6. Pixhawk代码分析-准备

    Pixhawk代码分析准备篇 实验平台 Software Version:ArduCopter(Ver_3.3) Hardware Version:pixhawk IDE:eclipse Juno ( ...

  7. PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第二篇(算法)

    背景: 上一节,我们已经把消灭星星的界面搭建好了,流程也跑通了. 这一篇涉及到程序的算法,也许是最难的部分了,理解起来需要多花点时间,而且我提供的算法未必就是最好的,如果读者有更优更好的算法,希望分享 ...

  8. ARM裸机篇---启动代码分析

    ARM裸机篇---启动代码分析 先搞清楚启动代码和Bootloader的区别,启动代码是指CPU复位后到进入C语言的main函数之前需要执行的那段汇编代码. 下面的代码先暂且这样吧,没啥注释的,时间关 ...

  9. 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----UDP篇

    //========================================= 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----UDP篇 文章作者:alalmn-飞龙 信息来源: ...

最新文章

  1. relay.build调用关系
  2. 颜宁强烈推荐:给研究生的四条金玉良言
  3. 腾讯最新开源项目登上GitHub热榜:QQ音乐等18项业务都在用,日均PV过亿
  4. 哈工大c语言编程题中国大学mooc第四周,中国大学MOOC哈工大C语言程序设计精髓第六周编程题答案.doc...
  5. antd 文本域超长问题_一款能快速批量处理SQL文本的软件:NimbleText
  6. likelihood(似然) and likelihood function(似然函数)
  7. 第二百五十天 how can I 坚持
  8. matlab plot title 包含变量的图片标题
  9. 2015 计算机考研大纲,2015年考研计算机大纲详解:操作系统
  10. 关于ListView 自定义 Adapter的问题
  11. 【转载】早点长大的飞秋
  12. Lync2010服务器的高可用性部署测试
  13. spark graphx入门
  14. wpf demo (gif , multithredading,httpwatch)
  15. 控制台js常用解决方案,字符串替换和抓取列表页链接
  16. mysql有if选择更新_使用IF条件的MySQL更新
  17. TensorFlow1.x入门(2)——变量的定义及其操作
  18. Python批量提取Excel文件中所有单元格批注
  19. 怎么用计算机的计算器转换进位制,计算机进制换算(进制转换计算器)
  20. Room cannot verify the data integrity. Looks like you‘ve changed schema but forgot to update the ve

热门文章

  1. 男生:千万不要对女生太好
  2. phpstorm去除光标所在行背景色
  3. Linux文件/目录高级管理一(中级难度)
  4. 再见,收费的 Teamviewer!!!
  5. android中android:layout_marginBottom的不起作用问题
  6. Loadrunner简介(一)
  7. Android蓝牙自拍杆按钮防抖
  8. 支付不重复订单号生成
  9. solr集群安装部署
  10. 【如何用C++编程制作一个简单的游戏引擎】